LoginSignup
0
0

More than 1 year has passed since last update.

C言語のポインタに関する説明

Posted at

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変数が保持しているアドレスの番地の中身を参照する。

pointer.jpg

次にポインタと配列の違いを見ていく。

#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を宣言した場合、初期化されないので初期化する必要がある。

0
0
8

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