得到一个地址用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

回到顶部