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]で出力
*(a+i)で出力
*(p+i)で出力
*p++について
結合方向は、++と*の優先度が同じであるため、右から左になるため、*(p+)に等価である.作用は、まずpが指す変数の値(すなわち*p)を得てから、pを指す値に1を加えることである.
に等しい
*p++は*(p++)に等しい.一方、*(++p)は、まずp+1を使用する、さらに*pを取ることを表す.
上記のプログラムを実行すると、a[2]からa[11]の値が出力され、a[11]は定義されません.
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]は定義されません.