为什么前面两个不相同,后面两个相同的地址
#include<stdio.h>
int main(void)
{
char ch[]="asdfg";
char cj[]="asdfg";
char *p="asdfg";
char *j="asdfg";
printf("%p\n",ch);
printf("%p\n",cj);
printf("%p\n",p);
printf("%p",j);
return 0;
}
补充:
ch
和cj
, 在栈中分配空间用于存储实际的数据 (如果有全局属性,则存储在 data 段)ch[0] = 'd'
的赋值操作。ch
和cj
地址不同,只是初始存储值相同p
和j
在栈中分配空间存储其它地址值 (如果有全局属性,则存储在 data 段)p = other_addr
的赋值操作;但*p = 'd'
(等价于p[0]='d'
) 将引发运行时异常&p, &j
本身地址不同,但指向可以相同。"asdfg"
只需要一份,并且存储在'rodata' 段,因此p
和j
指向相同