工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

配列とポインタの関係

配列とポインタの関係

このチュートリアルでは、C プログラミングにおける配列とポインターの関係について学習します。また、ポインターを使用して配列要素にアクセスする方法も学習します。

配列とポインターの関係について学習する前に、次の 2 つのトピックを確認してください。


配列とポインタの関係

配列は、順次データのブロックです。配列要素のアドレスを出力するプログラムを書きましょう。

#include <stdio.h>
int main() {
   int x[4];
   int i;

   for(i = 0; i < 4; ++i) {
      printf("&x[%d] = %p\n", i, &x[i]);
   }

   printf("Address of array x: %p", x);

   return 0;
}

出力

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

配列 x の 2 つの連続する要素の間には 4 バイトの違いがあります . int のサイズだからです は 4 バイトです (コンパイラ上)。

&x[0] のアドレスが と x 同じです。変数名 x が 配列の最初の要素を指します。

<図>

上記の例から、&x[0] であることは明らかです。 x と同等です .そして、x[0] *x と同等です .

同様に、


例 1:ポインターと配列

#include <stdio.h>
int main() {

  int i, x[6], sum = 0;

  printf("Enter 6 numbers: ");

  for(i = 0; i < 6; ++i) {
  // Equivalent to scanf("%d", &x[i]);
      scanf("%d", x+i);

  // Equivalent to sum += x[i]
      sum += *(x+i);
  }

  printf("Sum = %d", sum);

  return 0;
}

プログラムを実行すると、出力は次のようになります:

Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 

ここで、配列 x を宣言しました 6 要素の。配列の要素にアクセスするために、ポインターを使用しました。


ほとんどのコンテキストでは、配列名はポインターに分解されます。簡単に言えば、配列名はポインターに変換されます。これが、ポインターを使用して配列の要素にアクセスできる理由です。ただし、ポインタと配列は同じではないことに注意してください。 .

配列名がポインターに変化しない場合がいくつかあります。詳細については、次を参照してください:配列名がポインターに分解されないのはいつですか?


例 2:配列とポインタ

#include <stdio.h>
int main() {

  int x[5] = {1, 2, 3, 4, 5};
  int* ptr;

  // ptr is assigned the address of the third element
  ptr = &x[2]; 

  printf("*ptr = %d \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2

  return 0;
}

プログラムを実行すると、出力は次のようになります:

*ptr = 3 
*(ptr+1) = 4 
*(ptr-1) = 2

この例では、&x[2] 、3 番目の要素のアドレスが ptr に割り当てられます ポインター。したがって、3 *ptr を印刷したときに表示されました .

そして、 *(ptr+1) を印刷します 4 番目の要素が得られます。同様に、 *(ptr-1) を印刷します 2 番目の要素が得られます。


C言語

  1. ビッグデータとクラウドコンピューティングの関係は何ですか?
  2. C++ ポインターと配列
  3. C パスのアドレスとポインター
  4. C 構造体とポインター
  5. 電気モーターの電圧と電流の関係
  6. 運用と保守の関係の改善
  7. IoTとエッジコンピューティングの関係
  8. SCADAとHMIの違い
  9. DCモーターとACモーターの違い
  10. ろう付けとはんだ付けの違い
  11. 2ストロークエンジンと4ストロークエンジンの違い