gpt4 book ai didi

arrays - C - 为什么 'address of' 运算符返回变量的整数值,而不管变量类型如何?

转载 作者:行者123 更新时间:2023-12-04 00:14:03 26 4
gpt4 key购买 nike

我正在对不同类型的字符串进行一些练习并返回它们的地址,以便更好地理解指针运算的概念。

我注意到,当使用 printf 函数并以 %p 作为引用字符时,在变量上使用 & 操作数时地址将增加 4 + 1 个字节,没有它则增加 1 个字节。

这是我的代码示例及其输出:

 1 #include <stdio.h>
2 #include <string.h>
3
4
5 int main ()
6 {
7 char charString_1[] = "Hello";
8 printf("%s\t%s\t %p\t %p\n", charString_1 + 1, charString_1 + 1, &charString_1 + 1, charString_1 + 1);

输出如下你好你好0x7ffe76aba5d0 0x7ffe76aba5cb

仅查看最后两个十六进制数字,地址分别为 203 和 208(十进制)。所以后者是一个比前者大的 char + int 值。如果我增加 2 (&charString_1 + 2) ,差距现在是 2(char + int) = 10 个字节。

我知道这个问题可能很荒谬,但我的搜索结果一无所获。我正在尝试了解内存的工作原理,并更好地发现错误代码中的常见错误。

最佳答案

当您对指针进行算术运算时,“基本单位大小”是指向的对象的大小。

所以,对于 char_string,它指向一个 char (size = 1),+1 操作只添加了一个 .

但是,表达式 &char_string 计算为 指向数组 的指针,该数组(在您的示例中)的大小为 六个 个字符(包括 nul 终止符),所以 that 上的 + 1 操作增加了 6.

您的两个 %p 字段 (5) 打印的值的差异是这两个大小之间的差异 (6 - 1 = 5)。如果你改变数组的长度(例如,像 char charString_1[] = "Hello, World!";)你会看到 &charString_1 + 1 的值发生了相应的变化>.

关于arrays - C - 为什么 'address of' 运算符返回变量的整数值,而不管变量类型如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65096314/

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