求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,
求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,缺省里面的数字呢...
求问个c语言问题,为什么二维数组做参数引用时,数组要填下标,如图划线部位。而一维数组就可以不用填,缺省里面的数字呢
展开
3个回答
展开全部
比如一维数组作函数参数时:f(int a[10]) 会被转换成f(int *a),即传递过去的是一维数组的首地址。所以即使你有个数组 int b[5],也能传递进int [10]做参数的函数。
二维数组作函数参数时:f(int a[10][5]) 后面的那个维数会被丢弃,转换为,f(int (*a)[10]),
之所以要保留除了第一维以外的维数,是因为int (*a)[10]是一个指向10个int组成的数组的指针,而不是int* 指针。
这个很难理解的,你必须把指针学好,很多入门的C语言书上会有解释,想一下就懂是不可能的,慢慢理解。
二维数组作函数参数时:f(int a[10][5]) 后面的那个维数会被丢弃,转换为,f(int (*a)[10]),
之所以要保留除了第一维以外的维数,是因为int (*a)[10]是一个指向10个int组成的数组的指针,而不是int* 指针。
这个很难理解的,你必须把指针学好,很多入门的C语言书上会有解释,想一下就懂是不可能的,慢慢理解。
展开全部
不清楚你学指针没,如果学了这个问题就好说了.二维数组是一个二级指针,而一维数组就是一个普通的指针.二维数组其实也是一维的,只是它的一个元素还是一个数组.而一维数组要得到一个元素可以这样:*(p+i) 这样是完全等价于p[i]的.而二维数组想要得到它其中的一个元素就要这样:
int i[10][3];
i[1][2] == *(i + 10*1 + 2);
但如果说这个数组是int i[10][30];就不能通用上面的公式,所以如果得到一个二维数组的元素就要由类型来定.如上代码,i是一个int *[3]类型的.
int i[10][3];
i[1][2] == *(i + 10*1 + 2);
但如果说这个数组是int i[10][30];就不能通用上面的公式,所以如果得到一个二维数组的元素就要由类型来定.如上代码,i是一个int *[3]类型的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二维数组做形参时可以省略第一个维度,第二个不能省
更多追问追答
追问
为神马=_=
追答
传递参数时实际传递的是指针,一维数组的名字已经是指针了。所以可以省略维度。
二维数组它的本质是数组里的元素也是数组。所以实际上数组名数组的指针。而数组指针必须有维度,所以第二个维度不能省略
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询