调用时的实参 | 类型 | 通常目的 |
func(&my_int) | int型地址 | int参数的传址调用 |
func(my_int_ptr) | 指向整数的指针 | 传递一个指针 |
func(my_int_array) | 整数数组 | 传递一个数组 |
func(&my_int_array[i]) | 整型数组元素的地址 | 传递数组的一部分 |
总结
a[i]总是被改写为*(a+1)
指针不可改写成数组,可以用下表访问指针,一般是指针作为函数参数,而且实际传递的是一个数组
只有作为函数参数时,一个数组的声明可以看成一个指针,作为函数参数的数组总会被编译器修改为指向第一元素的指针
数组定义为函数参数时,可采用数组和指针的形式,实际得到的是个指针
其他情况定义和声明必须匹配
c语言没有多维数组,只有数组的数组,尽管术语上称“多维数组”,但c实际上只支持“数组的数组”,可以把数组看作一种向量(即某种对象的一维数组),而它的元素可以是另一数组。
多维数组的布局越在右边的下标,越是先增长,线性存储
数组初始化
int a[3]={0,0,1};
int b[]={1,2,3,4};//以个数来定数组长度
int a[2][3]={
{1,2,3},
{4,5,6},
};
最后的逗号可省略。
可省略最左边的下标,编译器可自动推断个数
int c[][3]={
{1,2,3},
{4,5,6},
};
初始化的元素不足,则初始化为0,微观的看,是所有的位都为零。
char v[][9]={"a","fd"};//正确
char *v2[]={"af","ds"};//正确
int *w[]={{1,2,3},{3,4}};错误,只能初始化字符串
可以这样初始化
int r1[]={1,2,3};
int r2[]={2,3};
int *w[]={r1,r2};