2011年9月4日日曜日

Objective-C勉強開始!まずはC言語の基本から(ポインタ)

C言語といえばポインタ。
javaの時は意識することがありませんでした。
購入したObjective-Cの本にも、Objective-Cではポインタ演算を使うことはほとんど使うことないと買いてありましたが、おさらいを兼ねてコードを書いてみました。

void addkazu(int* x,int y);//javaでいう抽象メソッドの定義みたいなもの。
int main (int argc, const char * argv[])
{
//ポインタを試してみる
int taizyuu=0;//変数の定義
int* p;//ポインタ変数の定義
p=&taizyuu;//pにtaizyuuのメモリアドレスを代入
printf("%p,%p",&taizyuu,p);//taizyuu,pのメモリアドレスを表示
*p=78;//pが指すメモリアドレス(すなわちtaizyuuのメモリアドレス)に78を代入
printf(",%d,%d",taizyuu,*p);//taizyuu,pのメモリアドレスを表示 もちろん同値

//ポインタを使った参照渡しと値渡し
int kazu=10;
addkazu(&kazu,25);//kazuのメモリアドレスと25の値でadd関数を呼び出す
printf(",%d",kazu);//数に25が代入されて35になりました。

//ポインタ配列
int tokuten[5]={50,67,84,54,56};//配列の定義
int* p2;//ポインタ変数p2を定義
p2=tokuten;//tokutenのメモリアドレスをp2に代入
p2=&tokuten[0];//↑同じ意味
for(int i=0;i<5;i++){//メモリアドレスの表示
printf(",%p,%p",p2+i,&tokuten[i]);
}
for(int i=0;i<5;i++){//値の表示
printf(",%d,%d",*(p2+i),tokuten[i]);
}
return 0;
}
void addkazu(int* x,int y){
*x+=y;//main関数で定義した値に値渡しで渡したyを代入する
}

イメージ的にはjavaの参照渡しのイメージかな。javaでオブジェクトにアクセスするイメージかな。
自分なりに理解できたっぽい。

0 件のコメント:

コメントを投稿