NekoC

猫でもわかるC言語の個人的なまとめ資料

View on GitHub

07_ポインタ

ポインタと引数

サンプルコード


#include <stdio.h>
#include <stdlib.h>

void swap(int, int);
void swap_pointer(int*, int*);

int main(){

	int _int1, _int2;
	_int1 = 10;
	_int2 = 20;

	/* _int1 と _int2 を入れ替えたい*/
	printf("元 \n");
	printf("_int1 = %d, _int2 = %d \n", _int1, _int2);

	printf("----------------------------------------\n");

	swap(_int1, _int2);
	printf("swapを利用 \n");
	printf("_int1 = %d, _int2 = %d \n", _int1, _int2);

	printf("----------------------------------------\n");

	swap_pointer(&_int1, &_int2);
	printf("swap_pointerを利用 \n");
	printf("_int1 = %d, _int2 = %d \n", _int1, _int2);

	system("pause");
	return 0;
}

void swap(int value1, int value2){
	int temp;
	temp = value1;
	value1 = value2;
	value2 = temp;
	return;
}

void swap_pointer(int* value1, int* value2){
	int temp;
	temp = *value1;
	*value1 = *value2;
	*value2 = temp;
	return;
}

出力結果


元
_int1 = 10, _int2 = 20
----------------------------------------
swapを利用
_int1 = 10, _int2 = 20
----------------------------------------
swap_pointerを利用
_int1 = 20, _int2 = 10
続行するには何かキーを押してください . . .

ポインタのポインタ

サンプルコード


#include <stdio.h>
#include <stdlib.h>

int main(){

	int _int1;
	/*ポインタ*/
	int *p;
	int *p2;
	/*ポインタのポインタ*/
	int **pp;

	p = &_int1;
	pp = &p;

	**pp = 10;

	printf("******\n");
	printf("値\n");
	printf("******\n");
	printf("_int1 = %d, *p = %d, **pp = %d\n", _int1, *p, **pp);

	printf("******\n");
	printf("アドレス\n", _int1, *p, **pp);
	printf("******\n");
	printf("_int1 = %p, *p = %p, **pp = %p\n", &_int1, &p, &pp);
	system("pause");

	return 0;
}

出力結果


******
値
******
_int1 = 10, *p = 10, **pp = 10
******
アドレス
******
_int1 = 00EFF72C, *p = 00EFF720, **pp = 00EFF708
続行するには何かキーを押してください . . .