パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C言語 アドレスとポインタ



アドレスについて

&変数名によりその変数がメモリ上のどこに保存されているか取得することができる。

サンプルコード

#include<stdio.h>
int main(void)
{
	int a = 2, b = 5;
	printf("aのアドレス:%p\n", &a);
	printf("bのアドレス:%p\n", &b);
	return 0;
}


実行結果(実行するたびに変わる)

aのアドレス:0x7ffe03cf0cb4
bのアドレス:0x7ffe03cf0cb0





*型変数

  • 変数宣言において変数の前に*をつけることができる(以下*型変数とよぶ)。
  • *型変数は変数名がアドレスを示し、*変数名でそのアドレスに保存されている変数を表示する(エイリアス)
  • 下のプログラムでは*型変数aについてアドレスにint型変数bのアドレスを代入することで*aがbと等しくなるようにした。


サンプルコード

#include<stdio.h>
int main(void)
{
	int* a;
	int b = 5;
	a = &b;
	printf("aのアドレス:%p\n", a);
	printf("aに格納されている数値:%d\n", *a);
	printf("bのアドレス:%p\n", &b);
	printf("bに格納されている数値:%d\n", b);
	return 0;
}


実行結果

aのアドレス:0x7ffd6274843c
aに格納されている数値:5
bのアドレス:0x7ffd6274843c
bに格納されている数値:5





プログラム例

int型配列の合計と平均を求めるプログラム

サンプルコード

#include<stdio.h>

#define N 5


void Func(int a[N], int* sum, double* ave)
{
	*sum = 0;
	for (int i = 0; i < N; i++)
	{
		*sum += a[i];
	}
	*ave = (double)*sum / N;
}

int main(void)
{
	int a[N] = { 2,5,6,1,3 };
	int sum;
	double ave;
	Func(a, &sum, &ave);
	printf("合計:%d, 平均:%f", sum, ave);
	return 0;
}


実行結果

合計:17, 平均:3.400000