当前位置:编程学习 > C/C++ >>

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语言,感觉好多东西丢掉了!不知道对后期的影响大不大?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,