#include<stdio.h>
int main(){
int a, b, c;
char *p = 0;
int *q = 0;
double *r = 0;
cout<<(int)(p + 1); // printing 1 char size
cout<<(int)(q + 1); // printing 4
cout<<(int)(r + 1); // printing 8
int y = 9;
int *u = &y;
cout<<(int)(u+1); //printing 7208688
cout<<*(p+1); //not able to dereferance
}
在上述两种情况下类型转换如何工作?
为什么指针p,q,r无法取消引用?
答案 0 :(得分:0)
取消引用q
,r
,p + 1
,q + 1
,r + 1
,u + 1
或1
中的任何一个都有未定义的行为,因为这些指针都没有指向正确类型的对象。
您可以添加指针,以获得不同的指针值。仅针对保留在同一数组中的结果以及“最后一个指针”指针值(将指向单个对象的指针作为长度为1的数组进行处理)定义。您还可以将指针转换为整数类型,以获取实现定义的值。做这些事情并不涉及取消对指针的引用。
添加到空指针也是未定义的行为,因为空指针没有指向对象,所以没有什么可以说的。