第9章指針の基本文法


第9章指針の基本文法


1.理解ポインタ


ポインタとは?
  • メモリのアドレス値(通常は16進数)
  • ポインタ変数:ポインタを値とすることができる変数
  • 2)ポインタ変数宣言
  • ポインタ変数宣言の場合、変数名の前に*を付け、
  • を宣言します.
  • データ型ポインタ変数:指定データ型のメモリアドレス値
  • のみを記憶する.
  • 非データ型ポインタ変数:すべてのデータ型のメモリアドレス値を格納し、voidをデータ型
  • の代わりに使用する.
    3)イニシャルポインタ変数
  • の一般変数のメモリアドレス値を指定します.
  • 参照演算子(&)を使用して、通常の変数名の前の
  • に加算
    指定NULLの
  • メモリアドレス値が0の
  • 4)scanf()関数を使用する場合はアドレス参照演算子を使用しません(&)
    5)出力ポインタ変数:間接参照演算子(*)をポインタ変数名の前に使用
    6)ポインタの演算
  • は整数値のみを用いて加算減算
  • を行う.
  • は、同じデータ型のポインタ間で代入演算
  • を行うことができる.
  • ポインタ増減演算:データ型サイズで
  • 増減
    7)voidポインタ変数
  • ポインタ変数が指定されていないデータ型
  • は、すべてのデータ型のポインタ
  • を指定することができる.
    8)二重ポインタ変数の概要
    ポインタ変数
  • を格納ポインタ変数
  • 変数名に*を付け、
  • を宣言します.

    2.配列とポインタの関係を理解する


    1)主アレイとポインタの関係
  • 配列変数名ポインタ変数
  • アレイの各要素は、メモリに連続的に格納される
  • .
  • アレイの各要素は、ポインタ変数
  • として表すことができる.
    2)2 D配列とポインタの関係
  • 配列変数名と行を表す変数名はポインタ変数
  • である.
  • アレイの各要素は、メモリに連続的に格納される
  • .
  • アレイの各要素は、ポインタ変数
  • として表すことができる.
  • アレイポインタを使用すると、アレイのように
  • を使用できます.
    3)ポインタ配列の理解
  • ポインタは、アレイ要素のアレイ
  • である.
  • ポインタ配列宣言:配列名の前に*を付け、
  • を宣言します.

    3.ユニット実習


    1)3行*3列2個の2次元配列の宣言と初期化
    2)2個のアレイのマトリックスと
    #include <stdio.h>
    #define COL 3
    #define ROW 3
    
    int main()
    {
    	int a[COL][ROW] = { {1,2,3}, {4,5,6}, {7,8,9} };
    	int b[COL][ROW] = { {1,2,3}, {4,5,6}, {7,8,9} };
    	int c[COL][ROW] = { {0,0,0}, {0,0,0}, {0,0,0} };
    
    	// 포인터를 사용하지 않는 경우
    	/*
    	for (int i = 0; i < COL; i++) {
    		for (int j = 0; j < ROW; j++) {
    			c[i][j] = a[i][j] + b[i][j];
    		}
    	}
    	*/
    	// 포인터를 사용하는 경우
    	int *pa = a;
    	int *pb = b;
    	int *pc = c;
    
    	for (int i = 0; i < COL * ROW; i++) {
    		*(pc+i) = *(pa+i) + *(pb+i);
    		// * pc++ = *pa++ + *pb++;  // 동일함.
    	}
    
    	// 화면 출력
    	for (int i = 0; i < COL; i++) {
    		for (int j = 0; j < ROW; j++) {
    			printf("%4d", a[i][j]);
    		}
    		printf("        ");
    		for (int j = 0; j < ROW; j++) {
    			printf("%4d", b[i][j]);
    		}
    		printf("        ");
    		for (int j = 0; j < ROW; j++) {
    			printf("%4d", c[i][j]);
    		}
    		printf("\n");
    	}
    }
    
    <Result>
    
    
    1   2   3           1   2   3           2   4   6
    4   5   6           4   5   6           8  10  12
    7   8   9           7   8   9          14  16  18