日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/

?

#include<iostream>
using namespace std;

int?? fun(int a[][3],int n)???? // 其中二維數組形參必須確定數組的第二維的長度,第一維長度可以不定
//int fun(int (*a)[3],int n)?? //? 和? int?? fun(int a[][3],int n)? 功能和用法完全相同
{
??? int sum=0;
??? for (int i=0;i<n;i++)
?? ?{
?? ????? for(int j=0;j<3;j++)
?? ??? ? sum=sum+a[i][j];
?? ?}
??? return sum;
}

void fun1(int a[2])
{
??? int n = sizeof(a); // 因為在實際函數調用時,傳遞來的實參都是指針,所有這里是對指針求sizeof,
?? ??????????????????? // 而指針變量是int的整型變量。在vc++ 6.0中int類型變量占4字節,所以 n肯定是4
??? printf("%d/n",n);
}


int fun2(int a[],int n)?? //形參中可以不指定一維數組的大小。
{
?? ?int sum=0;
?? ?for(int i=0;i<n;i++)
?? ??? ? sum=sum+a[i];
?? ?return sum;
}



int main()
{
?? ?int b[2][3] = {{1,2,3},{4,5,6}};
?? ?int a[3]={1,2,3};
??? int num=0;
?? ?int num2=0;
?? ?int i=2;
?? ?int *p=&i;
??????? num=fun(&b[0],2);??? //ok
?? ?//? num =fun(b,2);? //ok

?? ?//? num=fun(&b[0][0],2);? // error C2664: 'fun' : cannot convert parameter 1 from 'int *' to 'int [][3]'
??? //? num=fun(&b,2);??????? // error C2664: 'fun' : cannot convert parameter 1 from 'int (*)[2][3]' to 'int [][3]'
??? //? num=fun(b[0],2);????? // error C2664: 'fun' : cannot convert parameter 1 from 'int [3]' to 'int [][3]'
? ?
??????? num2=fun2(&a[0],3); // ok
?? ?//?? ?num2=fun2(a,3);? //ok

??? //? printf("%d/n",num2);

?? ?//? printf("%d %d %d %d %d %d/n",b[0],&b[0],b[0][0],&b[0][0],b,&b); //只有b[0][0]是數組元素,其他均為地址
??? //? 結果: 1245032 1245032 1 1245032 1245032 1245032

??? //? 結論:雖然 b[0],&b[0],&b[0][0],b,&b 的值都相同,但是它們所代表(指向)的類型可能就不一樣,其中&b[0]和b所指
??? //? 向的類型是相同的,b[0]和&b[0][0]的類型可以是認為是相當(注意是相當,不是相同)。
?? //? C 語言中,當一維數組作為函數參數的時候,編譯器總是把它解析成一個指向其首元素首地址的指針,
? //? 當N維數組作為函數參數的時候,編譯器總是把它解析成一個指向其首元素(這里的首元素是個N-1維數組)首地址的指針,


??? //? printf( "%d/n ",num);
?? ?//?? ?printf("%d %d %d/n",sizeof(*p),sizeof(p),sizeof(b));? // sizeof(b)是求數組里所有元素所占的內存總和

??? //? printf("%d %d %d %d/n",*p,p,sizeof(&b[0]),sizeof(b[0]));
????????? // sizeof(&b[0])是對指針,即數組b的第一個元素(當然它是個長度是3的一維數組)的地址作用
?? ??? ?? // sizeof(b[0])是對數組b的第一個元素(當然它是個長度是3的一維數組)的作用,相當于求長度是3的一維數組所有
???????? // 元素所占內存和
??? //? 結果:2 1245008 4 12 //其中1245008是p的值,即*p的地址

?? ?//?? ?fun1(a); //ok
?? ?//?? ?fun1(&a[0]);//ok
?? ?//?? ?fun1(&a);// error C2664: 'fun1' : cannot convert parameter 1 from 'int (*)[3]' to 'int []'
?? ??? ?
?? ?//?? ?printf("%d/n",sizeof(a));
??????? return?? 0;
}

//*****************************************************************************
//二維數組的引用作形參時,注意事項。看例子
#include<iostream>
using namespace std;

?? int?? fun(int (&a)[2][3])???????? //ok,引用作形參,數組作引用形參,必須指定清楚所有維數
//
int? fun(int (&a)[ ][3],int n)???? //error C2265: '<Unknown>' : reference to a zero-sized array is illegal
// i
nt? fun(int &a[2][3])???????????? // error C2234: '<Unknown>' : arrays of references are illegal
{

??? int sum=0;
??? for (int i=0;i<2;i++)
??? {
???????? for(int j=0;j<3;j++)
???????? sum=sum+a[i][j];
??? }
??? return sum;
}

int main()
{
??? int b[2][3] = {{1,2,3},{4,5,6}};
??? int num=0;
??? num=fun(b);
??? printf("%d/n",num);
??? return 0;
}

總結

以上是生活随笔為你收集整理的C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:C/C++中二维数组作函数形参时,调用函数时,可传递的实参类