荒屋敷智也のブログ

【C++備忘録】Visual Studio2022 ポインタ

当ブログではアフィリエイト広告を利用しています

ポインタとは

変数のアドレスを記憶する変数のこと

ポインタ変数

#include <iostream>

int main()
{
	int apple = 101;
	
	//ポインタ変数
	int *p;

	//&はアドレスを表す
	p = &apple;

	//*をつけるとアドレス先の値を表す
	std::cout << *p << std::endl;

}

参照渡し

#include <iostream>

void keisan(int &x) {

	//*をつけてアドレス先の値を変更する
	x = 25;
}

int main()
{
	int apple = 101;

	//アドレスを渡す
	keisan(apple);

	//*をつけるとアドレス先の値を表す
	std::cout << apple << std::endl;
}

zenn.dev

ポインタ渡し

#include <iostream>

void keisan(int *x) {

	//*をつけてアドレス先の値を変更する
	*x = 25;
}

int main()
{
	int apple = 101;

	//アドレスを渡す
	keisan(&apple);

	//*をつけるとアドレス先の値を表す
	std::cout << apple << std::endl;
}

ポインタと構造体(アロー演算子

#include <iostream>

struct Fruits {
	char name[128];
	int price;
	int zaiko;
};

int main()
{
	Fruits store = {"apple", 150, 50};

	Fruits *p;
	p = &store;

	//かっこがないと、(.)が優先されて動きが変わります。
	std::cout << (*p).name << std::endl;
	std::cout << (*p).price << std::endl;
	std::cout << (*p).zaiko << std::endl;

	//上と同じ動きになる
	std::cout << p->name << std::endl;
	std::cout << p->price << std::endl;
	std::cout << p->zaiko << std::endl;
}

ダブルポインタ

#include <iostream>

int main()
{
	int x = 10; //int型の変数
	int *p;     //int型のポインタ変数
	p = &x;     //ポインタpに変数xのアドレスを代入

	int** pp;   //int型ポインタ変数のポインタ
	pp = &p;    //ダブルポインタppにポインタpのアドレスを代入

	**pp = 15;  //int型xの値を変更可能

	//以下同じアドレス
	std::cout << &p << std::endl;
	std::cout << pp << std::endl;

	std::cout << x << std::endl;
}

qiita.com

ダブルポインタを用いて、関数内で呼び出し元の値を変更

#include <iostream>

//ダブルポインタとして、pのアドレスを受け取る
void sum(int** goukei) {
	**goukei = 15;
}

int main()
{
	int x = 10; //int型の変数
	int *p;     //int型のポインタ変数
	p = &x;     //ポインタpに変数xのアドレスを代入

	//ポインタのアドレスを渡す
	sum(&p);

	std::cout << x << std::endl;
}