c++语言小问题
#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>
#include<cstring>
#include <algorithm>
#define N 52#define inf 0x7f7f7f7f
usingnamespace std;
int ma[N][N];
void f(int ma[][N])
{
cout<<"sizeof(ma)="<<sizeof(ma)<<endl;
}
int main()
{
cout<<"sizeof(ma)="<<sizeof(ma)<<endl;
f(ma);
return0;
}
输出:
sizeof(ma)=10816
sizeof(ma)=4
为什么两次输出不一样啊????
求助!
补充:好像明白了!
不过写程序粗心的话,还会写错的!
记不住啊!!
答案:二楼说的对~当方法中出现数组参数时,这时候,被传递进来的参数,就相当于是指向调用者的数组的首地址的指针,而这个指针的类型就是该数组的类型了,这里就是int类型的指针,所以当sizeof(ma)就是得到的就是一个int类型的大小,因此输出的值为4,而在主函数中,是直接使用该数组,因此sizeof(ma)就为一个int类型的大小4 乘以 数组的长度52*52,最终得到的值就是10816了。
希望我的回答可以解决你的疑问,望采纳~
其他:第一个输出,计算的是数组大小;当数组名作为参数传入f()中时,编译器默认解释为一个地址,也就是int *类型,所以sizeof就是4个字节 因为你的第二个函数计算的是形参的长度。而不是原本数组的长度。如果你f函数不要参数,结果就是一样的。不信你试试。 第一次是长度52*52*4=,第二次在函数里面sizeof将传过来的实参转为了指针,VC里面指针都是4个字节,所以。。。。
上一个:c语言精通是什么概念
下一个:我现在培训嵌入式,先期复习了下C语言,感觉好多东西丢掉了!不知道对后期的影响大不大?