int main(){ int i = 10; int *p = &i;
printf(" address of initialized pointer p: %u ", p); p = &(*p); printf(" modified address of initialized pointer p:%u value:%d valuez address: %d ", p, *p, &(*p));
return 0;}
代码输出:-
初始化指针p的地址:3221221820
初始化指针p的修改地址:3221221820 value:10 valuez地址:-1073745476
为什么是"
您在 printf 中使用了不正确的格式说明符。使用 %d 打印地址将不起作用。而是使用 %p 。 [打印地址的%u也不正确。]
这符合预期。
相关讨论
你有
当您第二次尝试打印地址时,使用
%d 而不是 %u。
请注意以下修改后的源代码中的粗体更改:
printf("modified address ofinitialized pointer p:%u value:%dvaluez address: %u ", p, *p,&(*p));
最值得注意的是,您应该使用 %p 来打印指针值,而不是 %u,正如在此线程的另一个答案中已经指出的那样。
指针的标准格式说明符是%p。为了安全起见,您应该始终在对 printf 的调用中明确地将指向 (void*) 的指针强制转换。不保证任何其他格式说明符都可以使用指针值。
例如
您看到的区别只是第一个格式说明符是 %u ,它将指针值打印为无符号整数,而第二次使用 %d 将其打印为有符号整数。