[C++]複数のポインタ(const char*)...
const char*
したがって、
したがって、
ただしch ptrが指す「文字列アドレス」は変更できます.(ex. ch_ptr = "Bye")
複数のポインタ
const char* ch_ptr = "Hello"
がある場合、ch_ptr
は、読み取り専用データ領域(.rdata、静的領域)に格納された"Hello"
という文字列アドレスを指す「ポインタ」である.したがって、
const char*
のサイズは32ビットオペレーティングシステムでは4バイトに固定され、64ビットオペレーティングシステムでは8バイトに固定される.const
によって定量化されるのはch ptrの「値」であり、すなわち"Hello"
の静的領域が格納される.したがって、
*ch_ptr = "Bye"
のように「値」を変更することはできません.ただしch ptrが指す「文字列アドレス」は変更できます.(ex. ch_ptr = "Bye")
int num = 1 ==> num = 2
int
型変数については、numのアドレス値を以下のように関数のパラメータとしてnumの値を変更することができる. void SetNumber(int* num)
{
*num = 2;
}
int main()
{
int num = 1;
SetNumber(&num);
}
const char* ch = "Hello" ==> ch = "Bye"
簡単に考えてみる.const char*
をint
型のような単純な資料型に変換し、int
型とした.答えはすぐにあるconst char**
すなわちconst char*
のアドレス値をパラメータとする. void SetString(const char** ch)
{
*ch = "Bye";
}
int main()
{
const char* ch = "Hello";
SetString(&ch);
}
テストコード#include <iostream>
using namespace std;
// 다중 포인터
// const char* ch1 의 값을 가져온다
// ex) void SetNumber1(int a) 와 같은 문법이라고 볼 수 있음
void SetString1(const char* a)
{
a = "After: SetString1";
}
// const char* ch1 의 주소를 가져온다
// 다중 포인터
// ex) void SetNumber1(int* a) 와 같은 문법이라고 볼 수 있음
void SetString2(const char** a)
{
*a = "After: SetString2";
}
// const char* ch1 의 주소를 가져온다
// 포인터의 레퍼런스(참조)
// ex) void SetNumber1(int& a) 와 같은 문법이라고 볼 수 있음
void SetString3(const char*& a)
{
a = "After: SetString3";
}
int main()
{
// ch1[ Before의 주소 ] << 8바이트(64비트에서)
// .rdata Before의 주소[B][e][f][o][r][e][\0]
const char* ch1 = "Before";
SetString1(ch1);
cout << ch1 << endl;
ch1 = "Before";
SetString2(&ch1);
cout << ch1 << endl;
ch1 = "Before";
SetString3(ch1);
cout << ch1 << endl;
// pp[ &ch1 ] << 8바이트
// ch1[ Before의 주소 ] << 8바이트(64비트에서)
// .rdata Before의 주소[B][e][f][o][r][e][\0]
const char** pp = &ch1;
*pp = "After: pp";
cout << ch1 << endl;
const char*& pr = ch1;
pr = "After: pr";
cout << ch1 << endl;
return 0;
}
しゅつりょくBefore
After: SetString2
After: SetString3
After: pp
After: pr
Reference
この問題について([C++]複数のポインタ(const char*)...), 我々は、より多くの情報をここで見つけました https://velog.io/@hhj3258/C-다중-포인터const-char를-첨가한テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol