指向char的指针的地址与指向char的指针的指针之间的区别

时间:2016-09-03 17:57:02

标签: c pointers

我有以下代码示例:

#include <stdio.h>

int main(void)
{
   char *text[2];
   text[0] = "Hello";
   text[1] = "World";

   printf("Address of text[0]: %p\n", text[0]);
   printf("Address of text   : %p\n", text);

   return 0;
}

该程序的输出是:

Address of text[0]: 0x400694
Address of text   : 0x7ffcac41b000

我想知道为什么这些地址的长度不同。为什么第一个指向char的地址只有6位数?

4 个答案:

答案 0 :(得分:3)

&#34;地址长度&#34;没有区别,区别在于

在这种特殊情况下,我假设text[0]指针指向一个保存编译时间值"Hello"的数据段,text指针指向运行时地址。

由于它们位于不同的内存段,因此它们可以“非常远”。所以你得到你看到的输出。

答案 1 :(得分:2)

第一个地址是&#34; Hello&#34;的地址,存储在您的数据段中。

第二个地址是text[]的地址,存储在您的堆栈中。

这两个记忆区域彼此相距很远,所以一个有很多位数,另一个有几个数字。

显然,%p只能呈现代表地址所需的数字。

答案 2 :(得分:0)

printf("Address of text[0]: %p\n", text[0]);

打印C字符串的地址(数组指向的地址第一个元素),而:

printf("Address of text   : %p\n", text);

打印数组第一个元素的地址。

答案 3 :(得分:0)

要获取数组text的第一项的地址,您必须使用:

printf("Address of text[0]: %p\n", (void *)&text[0]);

在您的问题中,您正在打印字符串"Hello"的第一个字符的地址(换句话说,是文本[0]的内容),而不是地址数组text的第一个元素,即 text[0]的地址,只是存储 的地址 text[0]