使用此代码:
int a = 10;
int *ap = 4;
printf("%d", ap);
当我用 4 初始化 int 指针 ap 时会发生什么?
为什么
printf("%d", ap);
工作,但是
printf("%d", *ap);
抛出错误?
那是因为4
不是有效的内存地址(在您的环境中)。如果您尝试取消引用具有无效内存地址的指针,则会出现错误。您应该使用正确的内存地址对其进行初始化
int a = 4;
int *ap = &a;
printf("%d", *ap);
或者
int *ap = malloc(sizeof(int));
*ap = 4;
printf("%d", *ap);
free(ap);
int a = 10
设置a
为(int)10
,即普通的旧整数 10。int *ap = 4
设置ap
为(int*)4
,即内存地址0x00000004。这是一个相对安全的假设,即您的进程无权访问地址 4,因此当您尝试使用*ap
.
顺便说一句:为了可移植性,请使用%p
指针printf
。(不能保证sizeof(int*) == sizeof(int)
,这可能会导致细微的打印错误。)