-1

使用此代码:

int a = 10;
int *ap = 4;

printf("%d", ap);

当我用 4 初始化 int 指针 ap 时会发生什么?

为什么

printf("%d", ap);

工作,但是

printf("%d", *ap);

抛出错误?

4

2 回答 2

4

那是因为4不是有效的内存地址(在您的环境中)。如果您尝试取消引用具有无效内存地址的指针,则会出现错误。您应该使用正确的内存地址对其进行初始化

int a = 4;
int *ap = &a;

printf("%d", *ap);

或者

int *ap = malloc(sizeof(int));
*ap = 4;

printf("%d", *ap);
free(ap);
于 2013-04-28T04:31:22.377 回答
0

int a = 10设置a(int)10,即普通的旧整数 10。int *ap = 4设置ap(int*)4,即内存地址0x00000004。这是一个相对安全的假设,即您的进程无权访问地址 4,因此当您尝试使用*ap.

顺便说一句:为了可移植性,请使用%p指针printf。(不能保证sizeof(int*) == sizeof(int),这可能会导致细微的打印错误。)

于 2013-04-28T04:31:03.973 回答