【C++的探索路3】数组与指针

前言

数组与指针为结构化编程中相当重要的内容,这两部分经常与引用和函数相互结合,但混起来一起讲的话可能篇幅较长容易晕。对于数组与指针这部分,主要面对的内容如下述:

数组

数组的定义形式:

定义:

类型 数组名[数组长度1]...[数组长度n];

类型:

一维数组,二维数组...n维数组,前面的n对应上面[ ]中的n,有几个维数就有几个[ ]。

一般来说不会定义到三维数组,因为真是太。。。。繁琐了,在图像处理等领域最常见的应该就是二维数组,分别表示横纵像素的位置。

应该在意的一些细节:

初始化

数组的赋值是从[0]下标开始的,而不是1。如果不注意这一点将造成地址错误,内存泄露的问题。

对于一维数组来说可以赋值少于数组所需个数的值。

比如: int a[3]={2,3};则a[0]=2,a[1]=3,a[2]=0;

此外一维数组可以省略包含多少个数量的值进行直接赋值,比如int a[]={4,5,7};则cout<<a[2]<<endl;输出的是7。

对于二维数组的话必须写明所需的列数,这个原理其实和一维数组一样。

不要在函数内部定义大数组

如【C++的探索路2】部分所讲述的内容,函数的内存空间为临时的位置,定义在栈这个位置上。在临时存储的位置定义大数组好比在临时停车场停了一辆重型坦克,很容易破坏栈。比如说在函数内部定义 int a[10000];一般来说编译器会直接蹦出一个stack crack之类的错误。

如果实在需要定义一个大数组,把它扔到所有函数之外,你的编译器会非常感谢你的所作所为。

数组做函数参数

主要就两点:

第一点:可以不写参数个数,二维数组需要写列数,这一点在上面的初始化部分进行了讲述。

第二点:数组作为函数参数是传引用

对于上述,可见下列程序:

void InsertionSort(int a[], int n) {
	int i;
	for (i = 0; i < n - 1; ++i) {
		int tmp = a[i + 1];
		int j = i;
		while (j >= 0 && tmp < a[j]) {
			a[j + 1] = a[j];
			--j;
		}
		a[j + 1] = tmp;
	}
}
void PrintArray(int a2d[][5], int n) {
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < 5; ++j)
			cout << a2d[i][j] << " ";
		cout << endl;
	}


}
int main()
{
	int b[5] = { 50,20,30,40,10 };
	int a2d[3][5] = { {5,2,3,1,4},{10,20,50,40,30},{100,120,50,140,30} };
	InsertionSort(b, 5);
	for (int i = 0; i < 5; ++i)
		cout << b[i] << " ";
	cout << endl;
	for (int i = 0; i < 3; ++i)
		InsertionSort(a2d[i], 5);
	PrintArray(a2d, 3);
    return 0;
}

本段程序共运用了两个知识点,其一为插入排序,其二为数组传参的使用

对于插入排序,其原理为:从右往左,依次取有序部分的元素和待插入元素比较,如果大于,则将该元素右移。。。

对于数组传参的使用,我们在PrintArray函数的定义可以看到,对于二维数组的打印,我们需要指定它的列数,不然我们无法确定地址位置。如果形参写成int a2d[3][]则会出现报错。

本部分小结如下

指针

指针为C++语言中非常重要的部分,无论是结构化还是面向对象中都有非常重要的应用,该部分的主要结构陈列如下:

本小节将分五个部分进行陈述,依次为基本概念,作用与副作用,空指针与void指针,常量指针以及函数指针。

基本概念

指针与指针变量

书中定义部分存在部分的偏差,也有可能是表述存在省略,从而导致部分歧义&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值