ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符数组与字符串

2021-09-22 22:32:36  阅读:152  来源: 互联网

标签:字符 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;
	}

(2条消息) C零基础视频-27-字符串_LittleLeapFrog的博客-CSDN博客icon-default.png?t=L892https://blog.csdn.net/LittleLeapFrog/article/details/103194678

标签:字符,char,地址,数组,printf,字符串,world,Array,hello
来源: https://blog.csdn.net/qq_50832904/article/details/120424385

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有