数组与指针
来源:互联网 发布:淘宝双十一横幅图标 编辑:程序博客网 时间:2024/05/16 17:54
今日被摆了一道,多级指针传参过程中丢失了数组信息。惭愧惭愧啊,仔细翻书,总算明白,所以在这里记下先。
首先,c语言中只有一维数组,所谓的多维数组也是用一维数组来模拟的。
其次,很多时候数组可以用指针操作的互换,但是数组并不等于指针。
如下代码:
void foo(char **** temp){char * a[10][20] = {NULL};// 这里a实际上是代表一个数组,并不是指针,是一个包含10个元素的一维数组// 每个元素的类型是:有20个char*元素的数组// 但是除了在sizeof这样的操作符中做转换之外,a可以自动被转换成a数组第一个元素的指针// 在这里这个指针并不是普通的指针,而是指向char * [20]数组的指针,// 这里可以把数组看成一种特殊的类型。// 所以下面的语句编译会无法通过(*temp) = a;// 我们可以这样定义一个数组变量char * (*p)[20];// 这里p是一个包含20个char*元素的数组类型的变量,而不是多个变量元素的数组// 下面的赋值是正确的p = a;// 而对于a[i],可以同样的推理知道,a[i]是a数组的第i个元素,由于a数组的元素是数组// 所以这里a[i]也是表示数组,也是在很多时候会自动转换成指向a[i]数组第一个元素的指针// 由于a[i]是一个包含20个char*的数组,所以a[i]的第一个元素是char*,// 所以a[i]可以自动转换成char**// 下面的编译可以通过(**temp) = a[0];(***temp) = a[0][0];// 而这样的代码则无法通过编译,因为这里右边得到的是一个指向数组的指针(*temp) = &(a[0]);// 可以这样写p = &(a[0]);}
因此,在函数传递参数的过程中,尽量不要使用多维的数组进行传递,因为在传递的过程中会丢失数组的
信息,对于用一维来模拟多维数组的C语言来说,这种信息是只有编译器才知道的,隐式的,我们无法
通过显示的方法来获得,较为可行的就是避免它。
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 做数据研究应该学的一本书----《应用统计学》
- 销售渠道管理6大重点
- 2014年SOA市场规模将达到91亿美元
- Symbian 应用软件开发、测试与 S60 平台安全常见问题问答
- yaffs2写文件操作
- 数组与指针
- 在C#中截取指定长度的中文字符串
- 许式伟应用程序框架设计:RuntimeClass与序列化
- js 对联广告
- 一段Ajax做的RSS订阅器JS代码
- 试试GoogleMap API
- 又一个Ajax获取xmlHTTPRequest代码
- Second post
- const 限定