C: 为什么pointer和&pointer有不同的值?

标签 c pointers memory-address

如果我在 OS X 上运行以下命令:

int main (void)
{
    int* n; // initialise(declare) pointer
    *n = 20; // the value in address pointed to by n is 20
    printf("n: %i, n&: %i\n", n, &n);
    return 0;
}

我得到:

n: 1592302512, n&: 1592302480

为什么会有不同的值?

最佳答案

Why do pointer and &pointer have different values?

表达式 &n 产生 n 本身的地址,而 n 求值为指针的 value ,即它指向的事物的地址。

但请注意,您有未定义的行为 首先,因为您取消引用了一个未初始化的指针。你需要让 n 指向你可以写入的地方。

例如,

int* n;
int i = 42;
n = &i;

// now you can de-reference n
*n = 20;

其次,您为 &n 使用了错误的 printf 说明符。您需要 %p:

printf("n: %i, &n: %p\n", n, &n);

关于C: 为什么pointer和&pointer有不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418854/

相关文章:

C 指向结构的双/三指针

assembly - 为什么在 NASM 中使用 RIP 相对寻址?

c - 在宏定义中使用成员名称

c - 如何摆脱单词之间的换行符?

c - 如何修复调用 pthread_create 时偶尔出现的 EINVAL 错误

c - 正在释放的指针未分配给 C 中的字符串数组

c++ - std::allocator<T>::deallocate 的第二个参数的目的是什么?

c++ - 关于指向数组的指针的困惑

c - 如何在内存 hexdump 中找到变量的地址?

c - 我们可以找到另一个小于float的数据类型吗?