#include<stdio.h> int main(int argc, char* argv[]) { char Array[11] = { 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' }; //Array是该数组名称,&Array表示取整个数组地址,&Array+i下一个数组的地址 printf("%p %d \n", &Array, sizeof(Array));//Array=*(&Array) printf("%p %d \n", &Array + 1, sizeof(*(&Array + 1)));//输出:0093FBB4 11 printf("---------------------------------------------------------------------\n"); //Array是可以视为基地址,(Array + 0)是数组的第一个元素地址,其他的元素都是在Array这个基地址的基础上偏移i个单位的得到的(Array + i) //整个数组首地址和第一个元素的地址起始地址是相同的,他的值是相同的,Array中保存的只是首元素的地址 printf("%p %c %d \n", (Array + 0), *(Array + 0), sizeof(*Array));//输出:0093FBB4 11 printf("%p %c %d \n", (Array + 1), *(Array + 1), sizeof(*(Array+1)));//输出:0093FBB4 11 //Array[0]是数组的第一个元素, Array[0]的地址和&Array相等,只是因为整个数组起始地址和第一个元素地址重合,结束地址却不一样 //当我们定义char Array[11] = { 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' };时 //我们可以假想,首先分配12个连续char类型大小的空间,然后把第一个元素的地址返还给Array, //然后把{}中的每个字符复制到Array+i指向的空间中 //假想有种数组类型的指针,它里面存放数组的地址&Array,然后Array存放首元素的地址,&Array指向整个数组空间,Array printf("---------------------------------------------------------------------\n"); *"hello world"; //编译器帮助我们做了以下几件事情: // 根据"hello world"的字符串长度,分配一段char类型的空间 // 将"hello world"中的字符一个一个复制到以上的空间中 // 在以上空间的末尾添加数字0作为结束标志 // 将字符串的首地址返回(char* 类型) printf("%p-%c-%d\n", "hello world", *"hello world", sizeof("hello world")); printf("%p-%c-%d\n", "hello world" + 1, *("hello world" + 1), sizeof("hello world" + 1)); //编译器根据"hello world"的字符长度,分配一段char类型的12个字节的空间, //然后将"hello world"中的字符一个个复制进去,在末尾加'\0'作为结束标志, //将字符串的首元素地址(const char*)返回,因为这是常量无法修改 const char* pstr = "hello world"; //上面这句话等价于 //const char* pstr = const char * "hello world"; //"hello world"其实是整个字符串的地址,也就是相当于数组名,里面的内容是hello world printf("%p=%p %c=%c\n", pstr, "hello world", *pstr, *"hello world"); printf("%p=%p %c=%c\n", pstr + 1, "hello world" + 1, *(pstr + 1), *("hello world" + 1)); printf("%p=%p %c=%c\n", &pstr[1], &"hello world"[1], pstr[1], "hello world"[1]); printf("---------------------------------------------------------------------\n"); //注意:这里面貌似像数组一样的东西,每个值都是不可以修改的,因为这是指向字符常量 return 0; }
(2条消息) C零基础视频-27-字符串_LittleLeapFrog的博客-CSDN博客https://blog.csdn.net/LittleLeapFrog/article/details/103194678