22.3.04レビュー
c
ポインタ:メモリ内のデータ・アドレス値を格納する変数
&演算子を使用して、特定のデータのメモリアドレスを検索できます.
*pは、pに格納されたアドレス(変数aのアドレス)のデータ、すなわち変数aそのものを表す.
ソース:https://modoocode.com/23
const int a =3; に示すように、データ型の前にconstを付けると、a値は絶対に変わりません.
強制的にa=5に設定すると、エラーメッセージが表示されます.
普段使っているarr[3]、*(arr+3)、3[arr]は同じ
ポインタとしてconstを使用する
https://starfish22.tistory.com/13
https://timing-bravery.tistory.com/49
https://ansan-survivor.tistory.com/1260
これが何を意味するか知っていますが、
正確には1番目3番目は理解していますが、2番目を見るたびにどうすればいいか悩んでいますが、混同をスキップしてからもう一度見たほうがいいです
まず私は胃袋を3つ背負いました時間はかかりますが混同はしません.
**ppa = *(*ppa)
arr[][]、arr[0]、arr[0][0]のアドレスは互いに同じであるが、同じ値ではない
アドレス値(&)またはsizeofが使用されていない場合、arr[0]、arr[1]はarr[0][0]およびarr[1][0]を暗黙的に指すポインタに変換される.
ポインタ:メモリ内のデータ・アドレス値を格納する変数
/* 사용방법 */
int* p; // (주소값이 저장되는 데이터의 형태)* (포인터의 이름)
int *p; // (주소값이 저장되는 데이터의 형태) *(포인터의 이름)
ポインタの値を格納するためにデータが必要なアドレス&a // &(주소값을 계산할 데이터)
上記のように使用&演算子を使用して、特定のデータのメモリアドレスを検索できます.
#include <stdio.h>
int main() {
int *p; // 정수형 포인터 p 와
int a; // 정수형 a를 지정
p = &a; // 포인터 p값을 a의 주소로 지정
a = 2;
printf("%d \n", a);
printf("%d", *p); // *p를 이용하여 p에 저장된 주소의 데이터를 가져오는 역할 >>>
//p = &a 를 통해 포인터p를 a 주소값으로 지정하였으므로
// 주소 a의 데이터인 2를 가져옴
return 0;
}
>>>2
>>>2
上記の*は、アドレス値に対応するデータを取得するために使用されます.*pは、pに格納されたアドレス(変数aのアドレス)のデータ、すなわち変数aそのものを表す.
ソース:https://modoocode.com/23
#include <stdio.h>
int main() {
int *p;
int a;
p = &a; // (1)포인터p를 a의 주솟값으로 지정
*p = 3; // (2)*p를 통해 포인터 p의 주소의 데이터를 3으로 생각
// (3)*p는 p에 저장된 데이터 값을 가져오라는 의미
// (4)p에 저장된 주소는 a
// (5) => (2)에 의해 a의 값이 3이 됨
printf("%d \n", a);
printf("%d \n", *p);
return 0;
}
>>>3
>>>3
aをインポートしたデータはなく、aをインポートしたデータの結果が出力される.const int a =3; に示すように、データ型の前にconstを付けると、a値は絶対に変わりません.
強制的にa=5に設定すると、エラーメッセージが表示されます.
普段使っているarr[3]、*(arr+3)、3[arr]は同じ
ポインタとしてconstを使用する
https://starfish22.tistory.com/13
https://timing-bravery.tistory.com/49
https://ansan-survivor.tistory.com/1260
これが何を意味するか知っていますが、
const int* a1 = &aa // 주소변경만 가능
int const* a2 = &aa // 주소변경만 가능
int *const a3 = &aa // 정수변경만 가능
上の3つが混同された.正確には1番目3番目は理解していますが、2番目を見るたびにどうすればいいか悩んでいますが、混同をスキップしてからもう一度見たほうがいいです
まず私は胃袋を3つ背負いました時間はかかりますが混同はしません.
**ppa = *(*ppa)
arr[][]、arr[0]、arr[0][0]のアドレスは互いに同じであるが、同じ値ではない
アドレス値(&)またはsizeofが使用されていない場合、arr[0]、arr[1]はarr[0][0]およびarr[1][0]を暗黙的に指すポインタに変換される.
int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("전체 크기 : %d \n", sizeof(arr));
// 24
printf("총 열의 개수 : %d \n", sizeof(arr[0]) / sizeof(arr[0][0]));
//3
printf("%d \n", sizeof(arr[0]));
//12
//sizeof(arr[0]) = 0번째 행의 길이 = 열의 갯수
//int 사이즈인 4를 곱해서 12가 나오는 것으로 추정
printf("%d \n", sizeof(arr[0][0]));
//4
//sizeof(arr[0][0]) = int의 크기 4를 리턴
//[0][0]으로 한 개의 값만을 가져오는데, 이 값의 크기는 4바이트
printf("총 행의 개수 : %d \n", sizeof(arr) / sizeof(arr[0]));
//2
//전체 크기를 열의 크기로 나눈 값
}
ポインタを使用した2 D配列複写(배열의 형) (*포인터 이름) [2차원 배열의 열 개수 = 2차원 배열의 행의 길이];
int (*parr)[3]; // 예시
parr[1] = *(parr +1)
parr[1][1]= *(*(parr +1) +1)
#include <stdio.h>
int main() {
int *arr[3]; // 배열 arr을 포인터로 지정
// arr[0] arr[1] arr[2]를 포인터로하여 주소지정이 가능해짐
int a = 1, b = 2, c = 3;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("a : %d, *arr[0] : %d \n", a, *arr[0]);
printf("b : %d, *arr[1] : %d \n", b, *arr[1]);
printf("b : %d, *arr[2] : %d \n", c, *arr[2]);
printf("&a : %p, arr[0] : %p \n", &a, arr[0]);
return 0;
}
関数を呼び出すときは、&リットル値を使用し、関数を定義するときは*を使用して点を指定します.예시
#include <stdio.h>
int change_val(int *i) { // 함수 정의 시 *를 이용한 포인터 사용
i = 3;
return 0;
}
int main() {
int i = 0;
printf("호출 이전 i 의 값 : %d \n", i);
change_val(&i); // 함수 호출시 &를 이용한 주솟값 사용
printf("호출 이후 i 의 값 : %d \n", i);
return 0;
}
関数を使用するときにmain()関数をアップロードする場合は、関数の定義を上に書く必要があります.#include <stdio.h>
int swap(int *a, int *b); // 함수의 원형부분
int main() {
int i, j;
i = 3;
j = 5;
printf("SWAP 이전 : i : %d, j : %d \n", i, j);
swap(&i, &j);
printf("SWAP 이후 : i : %d, j : %d \n", i, j);
return 0;
}
int swap(int *a, int*b) { // 함수의 정의부분
int temp = *a;
*a = *b; // 외부인 main()에서 가져오기 때문에 *는 필수적으로 붙어야함
*b = temp; // temp에 *을 붙이지 않은 이유는 함수 외부에서 가져오는 값이 없기때문
}
Reference
この問題について(22.3.04レビュー), 我々は、より多くの情報をここで見つけました https://velog.io/@gelgel5633/22.03.04-회고テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol