我是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.为什么?
答案 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字节)。