二维数组传递参数

本文探讨了在C++中如何使用指针和数组作为函数参数,并对比了堆上和栈上开辟空间的区别。通过具体实例说明了不同情况下选择合适参数类型的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在堆上开辟二维数组,和在栈上开辟二维数组传递参数是可以不一样的,尤其对于字符串更是这样。

#include<iostream>
using namespace std;

void printf(char **b)
{
	while(*b)//注意此处传入的b必须最后至少最后一组字符是'\0'否则会出错
		cout<<*b++<<endl;
}

void print(char **b)
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cout<<b[i][j]<<endl;
}

void print(char b[][10])//或者写成char (*b)[10],指向有10个char形的数组指针
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cout<<b[i][j]<<endl;
}

void print(int **b)
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cout<<b[i][j]<<endl;
}

void print(int b[][3])
{
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cout<<b[i][j]<<endl;
}

int main()
{	
	char *b[6]={"aaa","bbbb","ccccc","dddddd","eeeeeee"};
	char d[10][10]={"aaa","bbbb","ccccc","dddddd","eeeeeee"};
	print(b);
	printf(b);
	print(d);//print(d)不能调用void print(char **b),因为d的第二个维度是固定的

	int **a=new int*[3];
	for(int i=0;i<3;i++)
		a[i]=new int[i+3];

	int k=1;
	for(int i=0;i<3;i++)
		for(int j=0;j<i+3;j++)
			a[i][j]=k++;

	int c[3][3]={{1,2,3},{4,5,6},{7,8,9}};
	
	print(a);
	print(c);//print(c)不能调用void print(int **b),因为c第二个维度是确定的

//以上两个例子说明了数组和指针用作首地址时候的不同点

	system("pause");
	return 0;
}

对于在堆上用new开辟的整型二维数组来说,用**传递参数意义不大,因为无法判断停止条件。但对于字符串来说是很有意义的,因为字符串默认最后会加入一个'\0'作为结束符,可以直接用**传递参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值