C++1次元配列とポインタの関係まとめ

2509 ワード

配列int a[10];
aは配列の最初の要素のアドレス、すなわち&a[0];
ポインタpを配列の先頭要素に向けると、次の操作が可能になります.
int * p=a;
または
int *p=&a[0];
ではp++は、配列の最初の要素、すなわちa[1]を指す.
このとき*pはa[1]に置かれた値である.
このとき、a[i]=p[i]=*(a+i)=*(p+i)
次に例を挙げます.
直接a[i]で出力
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	for(i=0;i<10;i++)

	cout<<a[i]<<" ";

	cout<<endl;

	return 0;

}


*(a+i)で出力
 
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	for(i=0;i<10;i++)

	cout<<*(a+i)<<" ";

	cout<<endl;

	return 0;

}


*(p+i)で出力
 
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	int * p=a;

	for(i=0;i<10;i++)

	cout<<*(p+i)<<" ";

	cout<<endl;

	return 0;

}


*p++について
結合方向は、++と*の優先度が同じであるため、右から左になるため、*(p+)に等価である.作用は、まずpが指す変数の値(すなわち*p)を得てから、pを指す値に1を加えることである.
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	int * p=a;

	while(p<a+10){

		cout<<*p++<<"\t";

	}

	cout<<endl;

	return 0;

}


に等しい
 
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	int * p=a;

	while(p<a+10){

		cout<<*p<<"\t";

		p++;

	}

	cout<<endl;

	return 0;

}


*p++は*(p++)に等しい.一方、*(++p)は、まずp+1を使用する、さらに*pを取ることを表す.
 
 
#include<iostream>

using namespace std;

int main(){

	int a[10]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Please input 10 intergers: "<<endl;

	int i=0;

	int * p=a;

	while(p<a+10){

		cout<<*(++p)<<"\t";

	}

	cout<<endl;

	return 0;

}


上記のプログラムを実行すると、a[2]からa[11]の値が出力され、a[11]は定義されません.