C言語のポインタに関する記載
以下のコードを解説していく。
#include <stdio.h>
#include <stdlib.h>
int main(){
int* pointer;
int data;
data = 513;
pointer = &data;
printf("%d\n",*pointer);
return 0;
}
実行結果は以下の通り。
513
data変数のアドレスは&dataと表現されるので、data変数のアドレスがpointer変数に代入される。
pointer変数はポインタ変数。
*pointerでpointer変数が保持しているアドレスの番地の中身を参照する。
次にポインタと配列の違いを見ていく。
#include <stdio.h>
#include <stdlib.h>
int main(){
int* pointer;
int array[10];
int i;
pointer = calloc(10,sizeof(int));
for(i=0;i<10;i++){
array[i] = 0;
}
for(i=0;i<10;i++){
printf("pointer[%d] = %d\n",i,*(pointer+i));
}
for(i=0;i<10;i++){
printf("array[%d] = %d\n",i,array[i]);
}
return 0;
}
実行結果は以下の通り。
pointer[0] = 0
pointer[1] = 0
pointer[2] = 0
pointer[3] = 0
pointer[4] = 0
pointer[5] = 0
pointer[6] = 0
pointer[7] = 0
pointer[8] = 0
pointer[9] = 0
array[0] = 0
array[1] = 0
array[2] = 0
array[3] = 0
array[4] = 0
array[5] = 0
array[6] = 0
array[7] = 0
array[8] = 0
array[9] = 0
pointer変数はポインタでありメモリを動的確保出来る。
calloc関数で動的確保した場合、確保した領域は0で初期化される。
配列arrayを宣言した場合、初期化されないので初期化する必要がある。