数组的地址分配和c中数组的指针

时间:2014-02-08 08:08:24

标签: c arrays pointers

我是c语言的新手。 这是我的代码

char c[]="name";
char *p="city";
printf("\n 1. memory location of array in pointer is %u",p);
p=c;
printf("\n 2. memory location of array in pointer is %u",p);

它给了我输出:

指针中数组的内存位置是177

指针中数组的内存位置是65518

现在检查内存分配的差异,第一次

char *p="city"

p中的地址是177,第二次是

p=&c;
p中的

地址是65518.为什么? 我没有得到数组的地址分配。通常在c中声明一些变量时,地址就像655 ...而且当时char * p,它的不同。是否有任何具体原因。

我正在使用Windows 7 32位操作系统

我的问题是什么时候

char *p="city"
p中的

地址是177.为什么?

2 个答案:

答案 0 :(得分:2)

因为数组名称在分配或传递时被衰减为指向第一个元素的指针(分配给第一个元素的地址类型的变量)。

p = c;  // & is not needed, and not defined behavior 

printf("%p\n", (void *)&p);

给你地址

答案 1 :(得分:0)

记忆中有不同的区域。 当你对变量进行decalre时,它将在HEAP中声明。 ROM是声明后的变量的含义,不能改变。 在你的问题char []中,一个数组意味着变量,它将进入HEAP.so 65432或其他东西。 2. char * p =“name”,是一个字符串常量。“name”的空格将在ROM区域中声明。所以772.you不能将“name”改为“nass”。可能是也可能不是。 由虚拟内存系统给出的每个区域的LAST.space。 ROM。无空间 - 无位钻头 HEAP-LARGE SPACE所以--- addr的大位(通常在窗口7中为4字节)。