指针和数组一致的情况及二维数组初始化
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];
总结
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
给主人留下些什么吧!~~
评论热议
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
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail
- C初始化字符串指针和二维字符数组
- 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail
- 【错误记录】二维数组初始化,以二级指针传递函数参数
- 不同语言的二维数组初始化
- C 二维字符数组初始化思考
- 关于数据类型与指针的小笔记--初始化问题&&数组
- 二维数组参数传递 指针降级
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- 二维指针、指针数组和数组指针
- C/C++ 二维指针 矩阵 初始化
- 关于vector二维动态数组初始化
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- 指针转换(数组退化为指针的三种情况)
- 二十六、数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数
- 一维指针和数组,二维指针和数组
- C机顶盒开发实战常用初始化类型:数组、结构、指针
- 二维指针 与 指针数组
- 牛客网 请检查是否存在数组越界非法访问,野指针乱访问,空指针乱访问等情况
- 二维字符串数组指针的问题