C++

C++作业

这孩子最近有点傻

Posted by 婷 on September 22, 2019 本文总阅读量

今天在写C++作业的时候,发现自己脑子有点小傻。。。 :sleeping:

#include <iostream> 

using namespace std;

void sum(int a[][2],int n,int b[])
{
	int i,num;
	num=sizeof(a);
	cout << num << endl;
}

int aaa;
int test[5][2],test2[2];
int main()
{
	sum(test,5,test2);
	aaa=sizeof(test);
	cout << aaa << endl;	
}

两个坑

  • 第一个坑,开始只是想在子函数里面求出二维数组的大小,结果跑出来的结果是4,一脸懵逼的还想着为什么跑出8。。。
  • 第二个坑,主函数跑出来的代码是40。。。

第一个坑

关于第一个坑,其实是数组作为形参的时候是作为指针常量的,然后在64位环境下,指针的大小是8个字节的,所以对指针sizeof的话结果是8

1.png

如果我将devc++这里的环境改一下,改成32位

2.png

那么结果就是4

第二个坑

主函数跑出来是40。。。

那肯定是40啊。。。。

十个元素,十个int,那不就是40。。。

求二维数组的行数跟列数

将主函数改成这样,就可以求出行数

int main()
{
	sum(test,5,test2);
	aaa=sizeof(test)/2/sizeof(int);
	cout << aaa << endl;	
}

同理,如果求列数的话

int aaa;
int test[5][2],test2[2];
int main()
{
	sum(test,5,test2);
	aaa=sizeof(test)/5/sizeof(int);
	cout << aaa << endl;	
}