您的位置:首页 > 其它

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

2013-10-31 11:52 183 查看
参见《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};

阅读(1100) | 评论(0) | 转发(0) |

0
上一篇:数组和指针并不相同

下一篇:getopt、getopt_long的可重入版本----linux交互式应用程序

相关热门文章

C++ Vector swap操作前后迭代...

C++中引用传递与指针传递区别...

linux内存分配方法总结...

(*(volatile unsigned int *)...

shell脚本的一些注意事项...

test123

编写安全代码——小心有符号数...

使用openssl api进行加密解密...

一段自己打印自己的c程序...

sql relay的c++接口

ChinaUnix & ITPUB社区12周年...

ssh连接出现以下提示,求解...

如何扩展MYSQL

准备做一个大型门户,用户什么...

gbk or utf8

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: