字符数组与字符串

2021/9/22 23:17:35

本文主要是介绍字符数组与字符串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

#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



这篇关于字符数组与字符串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程