ポインタと文字列
7092 ワード
📒 ししん
メモリアドレスを持つ変数
int i = 10;
char c = 69;
cout << &i; // 변수 i가 저장된 메모리의 주소가 출력
cout << (void*)&c; //
##포인터 선언 및 초기화 방법
1
int* ptr;
ptr = &i;
2
int* ptr = &i;
🙌 voidポインタ
voidポインタは、データ型の特性が不確定であるため、任意のデータ型のポインタを格納することができる.
逆にvoidポインタは、様々なデータ型のポインタに格納することができる.この特性からvoidポインタを汎用ポインタと呼ぶ.
ただし、voidポインタはデータ型を特定していないため、取得または格納値のサイズも特定していないため、voidポインタは逆参照できない.
ptr = numPtr1; // void 포인터에 int 포인터 저장
printf("%d", *ptr); // 컴파일 에러. void 포인터는 역참조할 수 없음
アドレスは1つの形式しかなく、ポインタには複数のタイプの理由があります。
メモリ内のアドレスは同じサイズであるため、どの形式でもアドレスのフォーマットに差はありませんが、プログラミングエラーを回避するためには、ポインタが指すタイプが正しいことを確認する必要があります.
Tip.
カッコ
ex) (*ptr)++
ポインタが宣言され、初期化されていない場合、ポインタは任意のアドレスを指します.
NULLで初期化した方が良い!
配列の名前はポインタ->配列の名前に他の変数のアドレスを挿入できますか?
No,配列の名前はポインタ定数です.値は変更不可
🙌 実際にポインタを使用する場合
✔ 1. 動的に割り当てられたメモリの使用
ダイナミックメモリの位置=ヒップホップ
hipから割当てを取得すると、関数が終了してもメモリ領域から消えないため、返却する必要があります.
メモリ容量
1、コード:プログラムコードを保存する
2、グローバル:グローバル変数global、静的変数static、配列、構造体構造などの記憶
3、スタック:関数を呼び出すと、関数のパラメータと領域変数が生成されます.関数呼び出しが終了すると自動的に消えます
4、臀部:動的配分可能
newキーワードは割り当てられたメモリのアドレスを返します
deleteキーを使用して返却されていない場合、メモリが漏洩します.
const int p1 vs int const p1
const int* p1
-> p1이 담고자하는 주소에는 const int가 저장되어 있다.
int* const p1
-> p1이 담고자하는 주소에는 int가 저장되어 있고, 이 값(주소)는 변경할 수 없다.
✔ 2. 変数のアドレスを関数のパラメータとして渡す
リファレンスによる呼び出し(リファレンスによる呼び出し)
1、ポインタを使う
void func(int* a, int* b){}
int main(){
int A = 10;
int B = 20;
func(&A, &B);
}
2、使用参考void func(int& a, int& b){}
int main(){
int A = 10;
int B = 20;
func(A, B);
}
2もっときれいです.変数のアドレスを関数のパラメータとして渡す
📒 C-文字列
c++では、文字列の末尾はNULLで終わる必要があります。
文字列を表す2つの方法.
文字配列を作成し、最後にNULL文字を追加します(NULL文字のASCIIコード値は0です).
クラスStringの使用
char s2[6] = "catdog";
strcmp(s 1,s 2)/strcmpでは、予め定められた基準に従って、s 1が負に等しく、0に等しく、高が負に等しい
//s 1のt以降の値は0(NULL)であるため、負の値が返される.
Reference
この問題について(ポインタと文字列), 我々は、より多くの情報をここで見つけました https://velog.io/@lkm9709/포인터와-문자열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol