使用此代码:
int a = 10;
int *ap = 4;
printf("%d", ap);
使用4?
初始化int指针ap时发生了什么为什么
printf("%d", ap);
工作,但
printf("%d", *ap);
抛出错误?
答案 0 :(得分:4)
那是因为4
不是有效的内存地址(在您的环境中)。如果您尝试取消引用具有无效内存地址的指针,则会出现错误。您应该使用适当的内存地址初始化它
int a = 4;
int *ap = &a;
printf("%d", *ap);
或
int *ap = malloc(sizeof(int));
*ap = 4;
printf("%d", *ap);
free(ap);
答案 1 :(得分:0)
int a = 10
将a
设置为(int)10
,即普通的旧整数10. int *ap = 4
将ap
设置为(int*)4
,即内存地址 0x00000004。这是一个相对安全的假设,当您尝试使用*ap
时,您的流程无权访问地址4,因此会出现细分错误(或者他们现在称之为的任何问题)。
顺便说一下:为了便于携带,请使用%p
到printf
指针。 (不保证sizeof(int*) == sizeof(int)
,这可能会导致一个微妙的打印错误。)