首页 > 其他 > 详细

多维数组的理解(可能导致“致命错误”)

时间:2014-03-23 10:40:38      阅读:457      评论:0      收藏:0      [点我收藏+]

以char szArr[][4][3];为例

该多维数组应该这样理解:

(1)一维数组szArr[]的单元为一个char[4][3]的二维数组;(同理,szArr[][4]的单元为一个char[3]的一维数组)

(2)当“数组名单独”出现的时候,“编译器”将其解释为“指向该‘一维数组’第一个元素”的“指针”;(所以,有时候我们会以为szArr[]的单元是一个二维指针,但可惜,事实并非如此)

(3)在函数传参的时候,数组名被“编译器”解释为“指向该‘一维数组’第一个元素”的“指针”;

(4)牢记一点:指针和数组名存在根本的不同。常见的例子是:

一个文件中定义int mango[100];//数组“开辟空间的特殊声明”,数组声明,意味mango[0]将“mango对应的符号表地址”+“偏移量”,之后访问内存单元

而另一个文件中声明extern int *mango;//指针的声明,意味着mango[0]将“mango对应的符号表地址”的内容取出后+“偏移量”,之后访问内存单元

当我们在另一个文件中mango[0];来使用时会出现程序的崩溃。

 

by the way:

(1)char str[][9] = {"hello", "world", "!"};

(str+1)//str的性质是char**指针,“+1”就是移动“char*”即一个字符串的大小,但类型还是char**,可以(atr+1)[1][1];来使用

(str[2])//str[2]的性质是字符串元素“!”

(&str+1)//移动单元为char的三维数组即{“hello”, "world", "!"}的下一个单元首地址

(*(str+1))//即“world”

(*(*(str+1)+1))//即‘o’,即str[1][1],又即(str+1)[0][1]

 

出处:《c专家编程》第4章、第9章

多维数组的理解(可能导致“致命错误”),布布扣,bubuko.com

多维数组的理解(可能导致“致命错误”)

原文:http://www.cnblogs.com/LFMY/p/3615305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!