const double * p = a; p += 1; 是什么意思? 在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针

C\u8bed\u8a00\u4e2ddouble p\uff1da\uff3b0\uff3d\u662f\u4ec0\u4e48\u610f\u601d\uff1f double p\uff1da\uff3bn\uff3d\u5462\uff1f

\u7b2c\u4e00\u4e2a\u95ee\u9898
\u521b\u5efa\u4e00\u4e2a double \u7c7b\u578b\u7684\u53d8\u91cfp\uff0c \u5e76\u5c06\u6570\u5b57 a \u7684\u7b2c 1 \u4e2a \u5143\u7d20 \u590d\u5236\u7ed9 p\uff1b

\u7b2c\u4e8c\u4e2a\u95ee\u9898

\u521b\u5efa\u4e00\u4e2a double \u7c7b\u578b\u7684\u53d8\u91cfp\uff0c \u5e76\u5c06\u6570\u5b57 a \u7684\u7b2c n+1 \u4e2a \u5143\u7d20 \u590d\u5236\u7ed9 p\uff1b

\u4e00\u3001\u6307\u4ee3\u4e0d\u540c
1\u3001*(p+1)\uff1a\u8868\u793a\u5177\u4f53\u7684\u6570\u503c\u3002
2\u3001p+1\uff1a\u8868\u793a\u5185\u5b58\u5730\u5740\u3002
\u4e8c\u3001\u6307\u5411\u7684\u503c\u4e0d\u540c
1\u3001*(p+1)\uff1a\u6307\u9488p\u6240\u6307\u5411\u7684\u5185\u5b58\u5730\u5740\u5355\u5143\u7684\u4e0b\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u5355\u5143\u4e2d\u7684\u503c\u3002
2\u3001p+1\uff1a\u6307\u9488p\u6240\u6307\u5411\u7684\u5185\u5b58\u5730\u5740\u7684\u4e0b\u4e00\u4e2a\u5185\u5b58\u5730\u5740\u3002


\u4e09\u3001\u5185\u5b58\u8868\u793a\u4e0d\u540c
1\u3001*(p+1)\uff1a*\u7684\u4f18\u5148\u7ea7\u6bd4+\u7684\u4f18\u5148\u7ea7\u9ad8\uff0c\u6240\u4ee5*P+1\u5728\u7f16\u8bd1\u5668\u4e2d\u662f\u5148\u53d6\u51fap\u6307\u5411\u7684int\u503c\u7136\u540e\u52a01\u3002
2\u3001p+1\uff1a\u76f4\u63a5\u5c06\u5185\u5b58\u4e2d\u6307\u5411\u7684\u5730\u5740\u52a01\uff0c\u5c31\u662f\u5c06\u8981\u6307\u5411\u7684\u5730\u5740\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-\u6307\u9488\u53d8\u91cf
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-\u6307\u9488

const double *p = a;
p += 1;
如果这两条语句有定义的话,const double 是double常量的意思 , *p 是定义指针的意思,合起来看就是定义一个指向double常量的指针,并将a赋予这个指针(天知道a是什么)。

p += 1; 等价于 p = p + 1; p + 1的意思是p的地址+1;

double *const p = &b;
*p += 1;

如果这条语句成立的话:
*const是一个声明符,意思是定义一个常量指针,就是指针的值不可以改变的。
则double *const p = &b;的意思是定义一个指向double的常量指针,同时将其初始化为b 的地址(&b表示b的地址)。

*p += 1;的意思是将p所指的对象+1;

语法1:
const 类型 *变量名 【 = 初始值】

语法2:
类型 const *变量名 【 = 初始值】

语法3:
类型 *const 变量名 = 初始值

语法4:
const 类型 *const 变量名 = 初始值

语法1和语法2 定义的都是某个类型的指针(等价的),指针的值是可以变的,但是所指向的对象的值不可以变。

语法3定义的是指针常量,也就是指针的值是不可变的,而所指对象的值是可以变得。

语法4定义的变量同时具有语法1 2 3的性质。

举个例子:

double a = 99;
double b = 34;

const double *p = &a;

*p = 34; // 错误
p = &b; //正确

double const *p1 = &a;
*p1 = 34; //也是错误
p 1 = &b; //正确

double *const p2 = &a;

*p2 = 34; //正确
p2 = &b; //错误

const double *const p4 = &a;

*p4 = 34; //错误
p4 = &b; //错误

你好:
const double *p=a; 这句话的意思是 a 本身是一个指向双精度变量的一个指针,而这样赋值后,p 本身也是一个指向双精度变量的指针,它也指向了同样的变量。
p+=1; 这句话的意思是 p 指针向地址单元的右侧方向移动一个单位,其单位长短根据其指向变量的类型大小而定。由于其指向了双精度类型,所以 p 的地址单元右移 8 个字节。但是在这里这样的写法是错误的,因为 p 指针是常量,其值不可被修改。

扩展阅读:韩国macbookpro ... texas instruments ... xboxone港版欧版美版区别 ... java windowbuilder ... www.sony.com.cn ... paperpass免费入口 ... xbox series x ... the blend 117 ... const double to float ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网