【C语言】使用指针传参(一维数组以及二维数组)

一、一维数组传参(指针)

        main函数中传参都是数组名arr——首地址元素

如下图所示:

int main(void){
int arr[10]={0};
test(arr);//只需要数组名arr
}

 接收 test() 方法一

void test(int *arr){
    cout<<*(arr+2);//表示输出数组第三个元素
}

arr表示数组的首地址相加1表示下一个元素

#include<bits/stdc++.h>
using namespace std;
void test(int *arr){
	for(int i=0;i<5;i++){
		cout<<*(arr+i);
	}
}
int main(void){
	int arr[5]={1,2,3,4,5};
	test(arr);
	return 0;
}

其他方法(对于初学者来说先掌握方法一在在掌握以下几种方法)

方法二:使用二级指针类型

void test(int* *arr){
    //这里是传入一个int* 的*arr指针
}

使用指针变量存取指针

#include<bits/stdc++.h>
using namespace std;
void test(int* *arr){
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			cout<<*(*(arr+i)+j);
		}
		cout<<'\n';
	}
}
int main(void){
	int *arr[3]={0};
	int a[3][3]={{1,2,3},{1,2,3},{1,2,3}};
	for(int i=0;i<3;i++){
		arr[i]=a[i];
	}
	test(arr);
	return 0;
}

对于更加详细介绍可以看下该代码,(43条消息) 二级指针传参(函数形参是二级指针)_芯辰大海的博客-CSDN博客

#include<iostream>
using namespace std;
void test1(int **ptr) {
	cout << **ptr << endl;
}
void test2(char **p) {
 
}
int main() {
	int n = 10;
	int *p = &n;
	int **pp = &p;  //二级指针
	int* arr[10];  //指针数组,数组元素是指针
	test1(pp);  //正确
	test1(&p);  //正确
	test1(arr);  //正确 因为数组名是首元素地址,那也就是指针地址,
	//——————————————————————————————————————————————————————————————————————//
	char c = 'w';
	char* pc = &c;
	char** ppc = &pc;
	char* arr1[10];
	test2(ppc);  //正确
	test2(&pc);  //正确
	test2(arr1);  //正确
	system("pause");
	return 0;
}

方法三:使用指针数组(难点)

先看懂这条语句(目的,对数组指针有一个大概的了解)

int *p[3];     //定义指针数组
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];     //通过循环将a数组每行的首地址分别赋值给p里的元素 

对于指针数组详细介绍访问如下链接,(43条消息) 指针数组和数组指针(非常易懂)_蔡泽基✔℡的博客-CSDN博客

了解后,使用test()接收

void test(int *arr[]){

}
#include<bits/stdc++.h>
using namespace std;
	void test(int *arr[]){
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++){
				cout<<*(arr[i]+j);
			}
			cout<<'\n';
		}
	}
int main(void){
	int *arr[3]={0};//指针变量的初始化;
//不可以使用 int *arr[5]={1,2,3,4,5};进行初始化
//原因,指针的初始化或赋值可以使用0值、常量表达式、和类型匹配对象; 
	int a[3][3]={{1,2,3},{1,2,3},{1,2,3}};
	for(int i=0;i<3;i++){
		arr[i]=a[i];
	}
	test(arr);
	return 0;
}

二、二维数组传参

        在主函数中

int main(void){
    int arr[10][10]={0,0};
    test(arr);
}

在二维数组中*arr表示的是二维数组的首行地址

接受test()方法一

void test(int (*p)[10]){
    //注意,正常情况下都需要标明二维数组的列数量。
}
#include<bits/stdc++.h>
using namespace std;
void test(int (*p)[3]){//当然*p可以换成*arr
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			cout<<(*(p+i))[j];
//*(p+i)表示第几行[j]表示第几列;
		}
		cout<<'\n';
	}
}
int main(void){
	int a[3][3]={{1,2,3},{1,2,3},{1,2,3}};
	test(a);
	return 0;
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值