1和2的p1和p2都是指向‘a’的地址(关键词-数组)

为什么这两种情况不一样
1.

img

2.

img



1和2的p1和p2都是指向‘a’的地址,为什么第一种情况两个指针是一样的,而第二种情况就不一样了呢?
虽然我能感觉到第二种情况多了一个‘d’ ,通过指针来找这个数组的时候两个数组是不一样的,所以输出的地址不一样,但是不明白其中的原理。

因为第一张可以理解成:
char tmp[]="abc";
char *p1=tmp;
char *p2=tmp;
所以当然输出就是一样的,因为这两个指针都是tmp的别名。
而你的第二张等效于:
char tmp1[]="abcd";
char tmp2[]="abc";
char *p1=tmp1;
char *p2=tmp2;
它们是不一样的数组/不一样的两块内存,当然指向它们的地址不一样。