字符数组 - 数组名

前言:写这篇文章是为了让大家真正的搞懂字符数组。大家都知道一个数组的数组名,就是该数组的那块内存空间的首地址。那么为什么其他数组打印首地址,就是真真切切的将地址打印出来了,而字符数据却是输出了整个字符数组的内容?

一、真正的了解字符数组

通过这段代码来讲解:

    char a[11] = "0123456789";    // 定义字符数组
	char *ptr = a;
	cout << (void *)a << endl;    // 打印首地址
	cout << a << endl;            // 打印字符数组内容
	cout << ptr << endl;          // 打印字符数组内容
	cout << (void*)ptr << endl;   // 打印字符数组首地址
	cout << *ptr << endl;         // 通过指针访问字符数组元素

首先a是一个长度为20的字符数组的数组名,即字符数组的首地址。那么a是什么类型呢,在我看来a可以理解为是一个数据类型为char * 的指针变量,这个变量存放的就是系统给字符数组分配的那块内存空间的首地址,这个是很关键的。同时,我们确实可以用一个char * 的指针变量 ptr去接收a.

那么当打印字符数组的数组名时,打印的是字符数组的内容,而不是字符数组对应的这块内存空间的首地址,为什么呢?

因为字符数组都以’\0’结束,所以在输出的时候,程序知道在什么时候结束,所以c++底层,对字符数组的输出cout重载了,输出的是字符数组的内容,而不是地址。

而要想获得地址输出的时候可以强制转换为其他类型的指针,在c++中 void 可以表示任意类型的指针变量。*

加粗样式
结果:
在这里插入图片描述

二、非字符数组

   当数组为非字符数组时,打印数组名,就是地址。注意与字符数组区分,搞懂原理即可。

猜你喜欢

转载自blog.csdn.net/qq_44859843/article/details/127640656