澄清 C 中指针的左值、右值行为

标签 c pointers printf

#include<stdio.h>

int main()
{
    int i = 10;
    int *p = &i;

    printf("\n address of initialized pointer p: %u \n", p);
    p = &(*p);
    printf("\n modified address of initialized pointer p:%u value:%d valuez address: %d \n", p, *p, &(*p));

    return 0;
}

代码输出:-

初始化指针p的地址:3221221820

修改后的初始化指针地址p:3221221820 value:10 valuez地址:-1073745476

为什么“&(*p)”在赋值语句和 printf 语句中使用时表现不同?

更新 抱歉,只是 printf 中的格式说明符错误;)。感谢您的回复和指出。

最佳答案

您在 printf 中使用了不正确的格式说明符。使用 %d 打印地址将不起作用。而是使用 %p。 [打印地址的%u也不正确。]

This按预期工作。

关于澄清 C 中指针的左值、右值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138244/

相关文章:

c - 如何编写线程安全的程序?

c++ - 使用自动递增参数调用宏

c - unsigned long long 十六进制格式打印

c - 使用 %f 格式说明符打印 int

c - 如何将数组的所有元素设置为零或任何相同的值?

c - 为什么我的随机数组和排序程序不工作?

c++ - 删除现有指针数组的值,然后将新值分配给指针数组

c - 当 p 指向一个字符时,strcmp(p, "\n") 是未定义的行为吗?

c - 行seed[0] *= 16807 的作用是什么

c - 如何在 C 中用零填充空白(整数)位置?