c - 指针(内存地址)的值如何根据增量的大小而变化?

标签 c

当我在 C 中有一个指针并使用 printf 中的 %x 将其打印出来时,我会收到如下内容:924752f7

现在,如果我将指针增加一个字符的大小,如下所示:

pointer += sizeof(char)

我怎么找回924752fb?如果一个char是一个字节(8位),那不是只增加一个地址,增加后的新值是:924752f8吗?

最佳答案

Sizeof(char) 是 1,因此您将“1”添加到“指针”,并且指针指向下一个位置。但下一个位置取决于指针的类型或指针所指向的变量的类型。它看起来像是指向一个长度为 4 个字节的东西。假设你的指针是这样声明的

char * ptr

打印语句表明加法前ptr指向地址0x2000

   ptr = ptr+sizeof(char) 

相加后指针将指向0x2001。

int * ptr

在此,如果 ptr 在加法之前指向地址 0x2000

ptr = ptr+sizeof(char) 

加法后指针将指向0x2004。 (这里假设int是4字节而不是short int)

关于c - 指针(内存地址)的值如何根据增量的大小而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47063709/

相关文章:

python - Python与内部调用的C程序进行交互

使用 MSVC 命令行创建动态库

C 中的计数排序显然有效,但二进制搜索无效

c - printk 适用于某些功能但不是全部

您可以使用 C 将函数的内存位置存储到 RAM 中吗?

c - Emacs:添加 do/while 和 if/else 作为电动 c 模式的异常(exception) (})

为 postgreSQL 创建扩展

c - 如何在系统头文件中找到某些变量的 C 定义?

c - 修改抓包包头

c - C中获取strstr之前和之后的文本