@[TOC](数组传参和指针传参)

1. 指针数组和数组指针

int arr[5];
//arr是一个整型数组,每个元素是int类型的,有5个元素

int* parr1[10];
//parr1是一个数组,数组10个元素,每个元素的类型int*
    

int(*parr2)[10];
//parr2是一个指向数组的指针,指向的数组有十个元素,每个元素的类型是int

int(*parr3[10])[5];
//parr3是一个数组,数组有10个元素,每个元素的类型是:int(*)[5]
//parr3是存放数组 指针的数组

2.数组参数、指针参数

  把数组或者指针传给函数时,函数参数的设计。

2.1一维数组数组传参

例1:

//注意:数组名在传参的时候传的是数组首元素的地址,有两个例外
//形参写成数组的形式:
void test(int arr[10]) 
{

}

void test(int arr[])//形参部分的数组大小可以省略
{

}

void test(int arr[100])//不建议,但是没错
{

}

//形参写成指针的形式:
void test(int*p)
{

}
//以上形式都可以传参
int main()
{
	int arr[10] = { 0 };
	test(arr);
	return 0;
}

2.2一维数组指针的传参

//数组指针的传参:
void test2(int* arr[20])
{

}

void test2(int* arr[])
{

}

void test2(int** p)
{

}
//以上写法都是可以的
int main()
{
	int* arr2[10] = { 0 };
	test2(arr2);
	return 0;
}

在这里插入图片描述

2.3二维数组(传参)

在这里插入图片描述

void test(int arr[3][5])
{

}

void test(int arr[][5])//行可以省略,但是列不能省略
{

}

void test(int(*p)[5])  //形参写成指针的形式,5表示指向的数组是5个元素,P+1可以跳过一行,来到第二行的首元素地址
{

}

void test2(int(*p)[3][5])
{

}
int main()
{
	int arr[3][5] = { 0 };
	test(arr);//传的是第一行的地址
	test2(&arr);//传的是整个二维数组的地址
	return 0;
}

在这里插入图片描述

2.4一级指针的传参

#include <stdio.h>
void print(int* p, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(p + i));
	}
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9 };
	int* p = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//一级指针p,传给函数
	print(p, sz);
	return 0;
}

2.5二级指针的传参

void test(char** ppc)
{

}
int main()
{
	char a = 'w';
	char* pa = &a;
	char** ppa = &pa;//ppa就是一个二级指针

	char* arr[4];//指针数组,每个元素是char*类型
	test(arr);
	test(ppa);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值