存储单元和地址的关系。

存储单元是什么意思呢?存储单元就对应一个内存地址对吗?还是说只要有存储单元才会有地址,有地址就会有存储单元呢? 举个例子,

第一个例子:"Great Wall"为数组里的元素

char s[] ="Great Wall" ;
printf("s[0]地址为%x\n", &s[0]);
printf("s[1]地址为%x\n", &s[1]);

运行结果是:
s[0]地址为0x33fa3c
s[1]地址为0x33fa3d
那么意思就是,G放在了内存地址为0x33fa3c的存储单元里,r放在了内存地址为0x33fa3d的存储单元里,是这样理解对吗?

第二个例子:"Great Wall"为字符串常量。

char *f = "Great Wall";
printf("f值为%x\n", f);
printf("f+1值%x\n", f+1);    

运行结果是:
f值为0xb97cb4
f+1值为0xb97cb5
那么意思就是,G放在了内存地址为0xb97cb4的存储单元里,r放在了内存地址为0xb97cb5的存储单元里,是这样理解对吗?问题是,Great Wall是字符串常量了呀,不是说字符串常量没有存储单元吗?那为什么每一个字符都会有地址呢?明明要有存储单元才会有地址吧。

#include<stdio.h>

#include<string.h>

int main()

{

char*p = "Great Wall";

for (int i = 0; i < strlen(p); i++)

{

printf("%p:%c\n", p+i, *(p + i));

}

return 0;

}

结果是对应地址和值