- 一、简介
- 二、数组
- 2.1 一维数组
- 2.2 二维数组
- 三、指针
- 3.1 一级指针
- 3.2 二级指针
本文主要讲述指针、数组和数组指针等做为函数参数进行使用,最后通过具体示例进行快速理解,希望对大家有所帮助。
二、数组 2.1 一维数组一维数组作为参数传参,直接将地址传进来进行使用。
#include2.2 二维数组#include void func(int arr[]){ int i = 0; for(i;i < 5;i++){ printf("the arr[%d] is :%dn",i,arr[i]); } return; } void main(){ int arr[5] = {1,2,3,4,5}; func(arr); return; }
相对于一维数组,二维数组要明确列的值,具体有下面两种类型:
第一类 固定行列传参 : void func(int arr[2][3]) 第二类 固定列传参:void func(int arr[][3])
#include三、指针 3.1 一级指针#include //void func(int arr[2][3]){ void func(int arr[][3]){ int i ,j; for(i = 0;i < 2;i++){ for (j=0;j < 3;j++){ printf("the arr[%d][%d] is :%dn",i,j,arr[i][j]); } } return; } void main(){ int arr[2][3] = {1,2,3,4,5,6}; func(arr); return; }
首先指针即存放一个地址,指向的这个地址的类型要根据具体数据进行声明;
如:
int a = 3; int *p = &a; //将存放整型3的地址赋值给p
以指针数组为例进行解析:
#include3.2 二级指针#include void func(int *p){ int i = 0; for(i;i < 5;i++){ printf("the arr[%d] is :%dn",i,*(p+i)); } return; } void main(){ int arr[5] = {1,2,3,4,5}; int *p = arr; //arr为数组的首地址 func(p); return; }
二级指针相对于一级指针的不同是,二级指针将一级指针的地址再存放在定义的二级指针中:
int a = 3; int *p = &a; //将存放整型3的地址赋值给p,指向一个int数据 int **q = &p; //存放指针p的地址,指向一个指针
使用基本与一级指针类似,用于多级函数传参使用:
#include#include void func(int **q){ int i = 0; for(i;i < 5;i++){ printf("the arr[%d] is :%dn",i,*(*q+i)); } return; } void main(){ int arr[5] = {1,2,3,4,5}; int *p = arr; //arr为数组的首地址 int **q = &p; func(q); return; }
注意:
当申明viod ** 类型的二级指针时,如果要输出,需要先强制转换为特定的类型进行输出,如 int **:
int d = 4;
void * f = (void*)&d;
void ** g = &f;
printf("the **g is :%dn",**((int **)g));
其他相c语言链接:
C语言常见数据类型字节数和打印格式总结



