一、一维数组传参(指针)
main函数中传参都是数组名arr——首地址元素
如下图所示:
int main(void){
int arr[10]={0};
test(arr);//只需要数组名arr
}
接收 test() 方法一
void test(int *arr){
cout<<*(arr+2);//表示输出数组第三个元素
}
arr表示数组的首地址相加1表示下一个元素
#include
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
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
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
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
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;
}