C++随笔——构造数据类型(2)

参考视频:C++语言程序设计基础——清华大学郑莉老师

参考教材:C++语言程序设计教程(第3版)清华大学出版社

参考链接:https://blog.csdn.net/men_wen/article/details/52694069

1、指针数组:指针数组是以指针变量为元素的数组。定义格式如下:

类型名 * 数组名[下标表达式];

可以存储若干行字符串。 如:

char * a[] = { "I'm a Chinese.",
			   "I come from ...",
			   "I like ....",
			   "C++ is not fun......" };

2、指针数组的每一个元素都是一个指针,每个指针存放一个指向某段内存单元的首地址,必须先赋值,后引用,否则是“野指针”。
3、指针数组常用在主函数传参中,在写主函数时,参数有两个,一个确定参数个数,一个是指针数组用来接收每个参数的地址。如下:

int main(int argc, char *argv[])

可用于排序,见数据结构排序算法。

#include "pch.h"
#include
using namespace std;

int main()
{
	void sort(char *a[], int n);
	char * a[] = { "Hello","C++","Come on","Learning","Together" };
	sort(a, 5);
	for (int i = 0; i < 5; i++)
	{
		cout << a[i] << endl;
	}
	return 0;
}

void sort(char *a[], int n)
{
	char * temp = NULL;
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (strcmp(a[i], a[j]) > 0)
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
}

C++随笔——构造数据类型(2)_第1张图片
4、数组指针:指向数组的指针,即,这个指针存放着一个数组的首地址。定义格式如下:

类型名 (* 指针名)[下标表达式];

如:

int(*a)[5];

定义了一个指向大小为5的int型数组的指针。
5、注意: 数组指针指向的是数组的首地址,不是数组首元素的地址,虽然数组的首地址和数组的首元素地址的值相同,但是操作不同。数组指针加一,会移动整个数组的长度。
6、在给数组指针赋值时类型要匹配,如下:

char(*a)[6];
char s[6] = "china";
a = &s;			//注意:a是指向大小为6的char型数组的指针,&s是数组的首地址,s是数组首元素的地址,是一个char型的地址。
cout << *a << "," << a << "," << (int *)s << endl;

输出结果如下所示:
a指向字符数组,*a相当于字符数组的数组名,所以输出字符数组的内容;而a和(int *)s都是输出字符串的地址。
C++随笔——构造数据类型(2)_第2张图片
在此附上参考教材中的“指针数组与数组指针的内存图”如下:

7、多重指针:指向指针的指针,也称为二重指针。定义格式如下:

类型名 * (* 变量名);

其中,* 变量名表示该变量是一个指针变量,前面的(类型名 *)表示该指针变量是一个指向该类型的指针
例如:

int * * pp;

pp指向一个int型指针变量,这个int型指针变量指向一个int型数据
引用*pp,就能得到pp所指向的int型指针变量的值。

你可能感兴趣的:(C++)