1. 程式人生 > >c語言二維陣列在子函式中的傳址

c語言二維陣列在子函式中的傳址

    在學習c語言的過程中,指標與二維陣列的傳值,傳址一直是我比較混淆的部分,今天做了一個較為完整的總結

  一.自己定義的陣列傳址

1. 

<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>
這部分告訴我們A[x][y]中其實A[x]代表的是一個地址

2.

<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[9][0],因為A[9][0]是代表值,而&A[9][0]代表的是&A[9][0]的地址

這部分有個重要結論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>