指针和数组一致的情况及二维数组初始化

参见《c专家编程》第9章
1.做为形参,二者可以换用,形参是指函数声明或者定义时的参数。
int *a;
int a[];
2.数组属于传址调用,不同传值调用,它传的只是指针,这是出于性能的考虑
实例
func(int *a);
func(int a[]);
func(int a[200]);
//上面作为形参,都看作传递指向int数组的第一个元素的指针。三种形式完全相同
 
int my_int;
int *my_int_ptr;
int my_int_array[10];

 调用时的实参

 类型 

  通常目的 

 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};

 

 

 

 

 

 

 

 

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值