C言語ポインタについて(簡単な説明)
-
問題の紹介:
最近、共有メモリについて学習しているときにポインタの問題が発生し、混乱しました。これはまた、自分の知識がしっかりしていないことを示しています。そのため、新入生の教科書をもう一度手に取り、C言語のポインターを確認し、このブログを作成して、今後の確認を容易にし、私と同じ問題を抱えている他の友人を支援しました。
-
知識源:
- 「C言語プログラミング」-TanHaoqiang
- 「Cプライマープラス」第6版
- ポインターの重要性:ポインターを習得しないと、Cの本質を習得できません。
- ポインタとは:ポインタはアドレスです
-
プログラム:(このプログラムは以下の概念として引用されています)
1. #include<stdio.h> 2. int main(){ 3. int a,b; 4. int *pointer\_a,*pointer\_b; 5. a=100;b=10 6. pointer\_a=&a; 7. pointer\_b=&b; 8. printf("a=%d,b=%d\n",a,b); 9. printf("\*pointer\_a=%d,\*pointer\_b=%d\n",*pointer\_a,*pointer\_b); 10. 11. 12. return 0; 13. }
1.ポインタの定義方法
类型 * 指针变量名(*:表示该变量类型是指针变量)
-
例えば:
int *ポインタ;
-
予防:
1.ポインタ変数の割り当て
pointer\_a=&a;pointer\_b=&b;
(✔)*pointer\_a=&a;*pointer\_b=&b;
(×)ポインターはアドレスであるため、ポインター変数はアドレスのみを保持でき、aとbの場合、アドレスは&a、&bです。
間違った方法は、a(*ポインタ_a)=&a、b(*ポインタ_b)=&bと書くことです。
間違った書き込みを避けたい場合は、ポインターを定義するときに初期化できます。int* pointer_a =&a、* pointer_b =&b;
2.基本タイプを指定する必要があります
理由:メモリ内のさまざまなタイプのデータが占めるバイト数が同じではありません。
router_a ++;(アドレス値に4を追加します(sizeof(int)= 4))
3.ポインタ変数への割り当ては、同じタイプのデータである必要があります
float a;
int *pointer;
pointer=&a;
(×)4.ポインタ変数に格納できるのはアドレスのみです
*ポインタ= 100;(×)
2.ポインタ変数を参照する方法
-
フォーカス
&:取地址运算符。 *:指针运算符(间接运算符)。*p是指针变量p指向的对象的值
(1)ポインタ変数に値を割り当てます。
p=&a; 指针变量p的值是变量a的地址,即p指向a;
*p=1; 等同于a=1;
printf("%d\n",*P);
printf("%o\n",p);输出a的地址
(2)ポインター変数の使用例:
1. #include<stdio.h>
2. int main(){
3. int *p1,*p2,*p,a,b;
4. scanf("%d,%d",&a,&b);
5. p1=&a,p2=&b;
6. if(a<b){
7. p=p1;p1=p2;p2=p;
8. }
9. printf("a=%d,b=%d\n",a,b);
10. printf("max=%d,min=%d\n",*p1,*p2);
11. return 0;
12. }
3.文字列、文字配列、ポインタ変数
-文字配列
C言語には実際の文字列型はなく、要素アドレスが連続しているため、文字配列を使用して文字列を表すことができます。
char str [10] = {“ hello world”};
C言語では、配列は、配列が配置されているメモリ位置の最初のアドレスを表し、str [0]のアドレスでもある、つまりstr =&str [0];であると規定されています。
而printf("%s",str); 为什么用首地址就可以输出字符串。。
C言語の文字列定数の本質は、実際にはアドレスです。!!
出典:https://blog.csdn.net/liusicheng2008_liu/article/details/80412586
オリジナリティは簡単ではありませんので、応援・交換をして、一緒に進んでください!!!
2019/11/17 15:06:59