gpt4 book ai didi

char * 变量地址 vs. char [] 变量地址

转载 作者:行者123 更新时间:2023-12-04 10:15:33 25 4
gpt4 key购买 nike

我正在从以下两个声明和初始化中打印出地址和字符串:

  char * strPtr = (char *) "This is a string, made on the fly.";
char charArray [] = "Chars in a char array variable.";

打印时,会出现以下输出,其中变量 charArray 和 strPtr 的地址截然不同。问题是,“为什么?”

打印:

  printf( "%10s%40s%20p\n", "strPtr", strPtr, &(*strPtr));    
printf( "%10s%40s%20p\n", "charArray", charArray, charArray);

输出:

    strPtr      This is a string, made on the fly.            0x400880    
charArray Chars in a char array variable. 0x7fff12d5ed30

如您所见,不同的地址是:0x400880 与 0x7fff12d5ed30

在此之前声明的变量的其余部分具有与 charArray 类似的地址。

同样,问题是“为什么地址如此不同?”感谢您的帮助。

最佳答案

因为字符串文字,例如“foo bar”被分配到与您的 char 数组“不同的地方”。

依赖于实现,但典型的实现会将字符串文字放入可执行文件的 .rdata(“只读数据”)部分,而你的 char数组在本地声明,因此进入堆栈。

当图像加载到 RAM 中时,图像的不同部分将映射到截然不同的地址。

关于char * 变量地址 vs. char [] 变量地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357157/

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