c語言二維陣列在子函式中的傳址
阿新 • • 發佈:2019-01-06
在學習c語言的過程中,指標與二維陣列的傳值,傳址一直是我比較混淆的部分,今天做了一個較為完整的總結
一.自己定義的陣列傳址
1.
這部分告訴我們A[x][y]中其實A[x]代表的是一個地址<span style="font-size:18px;">#include<iostream> #include<stack> using namespace std; void getarray(int *a){//傳址 printf("%d\n",a[2]); } int main(){ int A[10][10]; A[9][2]=3; A[0][0]=1; A[9][0]=2; A[0][1]=4; getarray(A[9]);//此部分打印出的是A[9][2]的值 return 0; }</span>
2.
此部分中注意傳的是&A[9][0],因為A[9][0]是代表值,而&A[9][0]代表的是&A[9][0]的地址<span style="font-size:18px;">#include<iostream> using namespace std; void getarray(int *a){//傳址 printf("%d\n",a[2]); } int main(){ int A[10][10]; A[9][2]=3; A[0][0]=1; A[9][0]=2; A[0][1]=4; getarray(&A[9][0]);//此部分打印出的是A[9][2]的值 return 0; }</span>
這部分有個重要結論A並不能作為一個地址作為傳遞
二.指標陣列傳址:
三.地址的加減#include<iostream> using namespace std; void getarray(int** A){ cout<<A[9][9]; } int main(){ int** a; a=new int* [9]; for(int i=0;i<10;i++) a[i]=new int[9]; a[9][9]=10; getarray(a); return 0; }
1.
#include<iostream>
using namespace std;
int main(){
int a[10][10];
a[9][9]=10;
a[0][1]=1;
a[1][1]=10;
a[1][0]=12;
char b[10][10];
printf("%d\n",a[0]);
printf("%d\n",a[0]+1);//加了一個int型的長度
printf("%d\n",a+1);//加了一行陣列的長度
printf("%d\n",b[0]);
printf("%d\n",b[0]+1);//加了一個char型的長度
printf("%d\n",b+1);//加了10個char型的長度
}
2.
<span style="font-size:18px;">#include<iostream>
using namespace std;
void getarray(int *a){//傳址
printf("%d\n",*(a+2));//注意,列印的是A[9][2]的數值,也就是加了2個int型
}
int main(){
int A[10][10];
A[9][2]=3;
A[0][0]=1;
A[9][0]=2;
A[0][1]=4;
getarray(&A[9][0]);//此部分打印出的是A[9][2]的值
return 0;
}</span>