标签:字符 char 地址 数组 printf 字符串 world Array hello
#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;
}
标签:字符,char,地址,数组,printf,字符串,world,Array,hello 来源: https://blog.csdn.net/qq_50832904/article/details/120424385
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。