C言語ポインターレビューノート

C言語ポインタについて(簡単な説明)

  • 問題の紹介:

    最近、共有メモリについて学習しているときにポインタの問題が発生し、混乱しました。これはまた、自分の知識がしっかりしていないことを示しています。そのため、新入生の教科書をもう一度手に取り、C言語のポインターを確認し、このブログを作成して、今後の確認を容易にし、私と同じ問題を抱えている他の友人を支援しました。

  • 知識源:

    1. 「C言語プログラミング」-TanHaoqiang
    2. 「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

おすすめ

転載: blog.csdn.net/HG0724/article/details/103185723