LoginSignup
0
0

More than 5 years have passed since last update.

ポインタのメモ

Posted at

ポインタ変数

  • アドレスを記憶する変数
  • 変数のショートカットとして使われる

変数宣言、アドレス代入

#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;
}

参照
苦しんで覚えるC言語 ポインタ変数の仕組み

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0