我接受了一次采访,他们问了我这个问题
#include<stdio.h>
int main ()
{
int* const p=NULL;
int const *q=NULL;
p++;
q++;
printf("%d\n",p);
printf("%d\n",q);
}
Run Code Online (Sandbox Code Playgroud)
以上程序将如何表现
a)p将增加4个字节;
和q也将增加4个字节;
b)p将为零
q将指向前面4个字节的存储器;
c)错误将出现在上述程序中
我无法理解这些陈述之间的区别
int* const p=NULL;
int const *q=NULL;
Run Code Online (Sandbox Code Playgroud)
dra*_*135 28
int* const p=NULL;
p是一个指向整数的常量指针.指针IS常量(指针值不能改变); 指向的整数不是常量(可以修改整数值).
所以声明:
p++;
Run Code Online (Sandbox Code Playgroud)
将无法编译因为尝试修改常量值(指针).
声明:
(*p)++;
Run Code Online (Sandbox Code Playgroud)
将增加指针指向的整数值p(但因为p已分配NULL,它将是未定义的行为)
int const *q=NULL;
q是一个指向常量整数的指针.指针不是常量(指针值可以改变); 指向IS常量的整数(不能修改整数值).
所以声明:
q++;
Run Code Online (Sandbox Code Playgroud)
将修改指针q指向前面4个字节的内存(假设sizeof(int)为4).(因为q被赋值NULL,q将是0x4 - 我假设NULL为零(在所有当前实现中都是如此),递增NULL指针实际上是未定义的行为)
声明:
(*q)++;
Run Code Online (Sandbox Code Playgroud)
将无法编译因为尝试修改常量值(指向的整数是常量)
| 归档时间: |
|
| 查看次数: |
9128 次 |
| 最近记录: |