得到一个地址用C
字符串常量,我想获得一个在C.得到一个地址用C
char * const MYCONST = "StringString";
字符串常量的地址据我所知consts在文本/代码段“拯救”的记忆。 当我试图让第一个元素的地址MYCONST:
printf("%p\n",&(MYCONST));
至于结果我得到0x7fff15342e28,这是在栈,而不是在文本/代码segement。 任何人都可以请帮我在C中得到一个字符串常量的地址吗?
//编辑 我无法找到正确的答案至今:当我写
char * const MYCONST1 = "StringString"; printf("Address of MYCONST1: %p\n",MYCONST1);
char * const MYCONST2 = "StringString";
printf("Address of MYCONST2: %p\n",(void*)MYCONST2);
这是输出:
MYCONST1地址:0x400b91
MYCONST2地址:0x400b91
但他们应该有不同的地址,因为它们是不同的常量。 任何人都可以解释我,而结果长度为七,而不是0x7fffa5dd398c像一个区域设置变量。
谢谢!
回答:
问: //编辑我无法找到正确的答案至今:当我写
char * const MYCONST1 = "StringString"; printf("Address of MYCONST1: %p\n",MYCONST1);
char * const MYCONST2 = "StringString";
printf("Address of MYCONST2: %p\n",(void*)MYCONST2);
这是输出:
Address of MYCONST1: 0x400b91 Address of MYCONST2: 0x400b91
但他们应该有不同的地址,因为它们是不同的常量。
答:由于两个指针指向相同的字符串常量。编译器优化并让它们共享相同的数据,并因此共享相同的地址。尝试编译你的代码
gcc program_name.c -O
并参见。你会看到不同的地址。
相对:Addresses of two pointers are same
回答:
C字符串的第一个字符的地址位于字符串本身的变量中,即您的情况中的MYCONST。
回答:
由于MYCONST
已经是一个指针,所以不需要&符号。所有你需要的是一个强制转换为void*
为%p
:
printf("%p\n",(void*)MYCONST);
与符号,您打印MYCONST
局部变量的地址(你需要一个void*
铸有作为,否则,地址可能打印不正确)这确实位于堆栈上。
回答:
printf("%p\n",(void *) &MYCONST);
打印MYCONST
指针变量的地址。
printf("%p\n", (void *) MYCONST);
打印MYCONST
指针变量的值。
回答:
char * const MYCONST = "StringString";
初始化指针MYCONST
,使其指向存储该字符串文字的内存。
要打印此字符串的地址,使用指针的值的
printf("%p\n", (void*) MYCONST);
代替
printf("%p\n", (void*) &MYCONST);
它打印指针本身的地址。
回答:
printf("%p\n",(void*)MYCONST);
将打印字符串MYCONST
指向的第一个元素的地址。
之所以没有在MYCONST
之前放&
是因为MYCONST
已经是指针了。
如果您需要打印address of Pointer
,那么您需要像&MYCONST
那样做。
以上是 得到一个地址用C 的全部内容, 来源链接: utcz.com/qa/263674.html