gpt4 book ai didi

c - 简单的指针查询,初始化一个指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:55 24 4
gpt4 key购买 nike

我有点困惑:

int* p=1000;
printf("%d\n", (int)(p+sizeof(int))); // what is going on here?

p 指向 1000 还是 p = 内存地址 1000?如果是前者,是否可以这样实现:

int dummyVariable = 1000;
int * p = &dummyVariable;

最佳答案

声明

int* p=1000;

制造 p 指向地址1000 .

在这种情况下

int dummyVariable = 1000;
int * p = &dummyVariable;

你初始化dummyVariable到值 1000并制作p指向 dummyVariable .


另一种看待它的方式:

第一种情况

          Address 1000          |          v+---+     +-----+| p | --> | ??? |+---+     +-----+

在第二种情况下你有

          Address &dummyVariable          |          v+---+     +----------------------------+| p | --> | dummyVariable (value 1000) |+---+     +----------------------------+

第三种看待它的方式,是 p 的值是一个整数(恰好是一个地址)。在第一种情况下 p包含值 1000 ,即它指向地址 1000 .

在第二种情况下 p 的内容是&dummyVariable ,即它指向内存中 dummyVariable 的位置已存储。


至于第一个例子中的打印输出,给你值 1016 ,这是因为指针算法的工作原理:添加到指针的任何内容都会乘以基类型的大小。所以如果你有一个指向 int 的指针, 然后你添加到该指针的所有内容都将乘以 sizeof int .

在您的例子中,int 的大小是4字节,所以你所做的实际上是 1000 + 4 * 4等于 1016 .

关于c - 简单的指针查询,初始化一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com