ポインタ変数
- アドレスを記憶する変数
- 変数のショートカットとして使われる
変数宣言、アドレス代入
#include <stdio.h>
int main(void){
// ポインタ変数の宣言
int *p;
int i;
// 変数iのアドレスを代入
// &: アドレスを求める演算子
p = &i;
// %p: ポインタを文字列に変換する出力変換指定子
printf("p = %p\n",p);
printf("&i = %p\n",&i); // iじゃない、iは通常変数
if(p == &i){
printf("アドレスが一致\n");
}
return 0;
}
ヌルポインタ
#include <stdio.h>
int main(void){
int *p = NULL;
int i;
if(p == NULL){
printf("ぬるぽ\n"); // 出力される
}
p = &i;
if(p == NULL){
printf("ぬるぽ\n"); // 出力されない
}
return 0;
}
間接参照演算子
#include <stdio.h>
int main(void){
int *p;
int i;
p = &i;
// 間接参照演算子(ポインタ変数を宣言するときの*とは別物)
// 通常変数モードに切り替え、値を代入
*p = 10;
printf("*p = %d\n",*p);
return 0;
}
配列
#include <stdio.h>
int main(void){
int *data;
int ary[] = {1,2,3,4,5,6,7,8,9,10};
// ポインタ変数に配列のアドレスを代入
data = ary;
for(int i = 0; i < sizeof(ary) / sizeof(ary[0]); i++){
// ポインタ変数を配列のように使える
printf("%d\n", data[i]);
// ポインタ演算(わかりにくいから使わないほうがいい?)
// ポインタ変数の中のアドレスを1つ増やしている
printf("%d\n", *(data + i));
}
return 0;
}