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

C言語: アドレスとポインタを関数に渡す – 実践ガイド

C言語: アドレスとポインタを関数に渡す

C言語では、値の代わりにアドレスを渡すことで、関数が元の変数を直接操作できるようになります。この技法はポインタ渡しと呼ばれ、効率的なコードとスコープを超えたデータ変更に不可欠です。

例1: 参照渡しによる2つの整数の交換

#include <stdio.h>
void swap(int *n1, int *n2);
int main(void) {
    int num1 = 5, num2 = 10;
    /* num1とnum2のアドレスを渡す */
    swap(&num1, &num2);
    printf("num1 = %d\n", num1);
    printf("num2 = %d", num2);
    return 0;
}
void swap(int *n1, int *n2) {
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

実行結果:

num1 = 10
num2 = 5

swap()関数は、元のnum1とnum2を指すポインタn1とn2を受け取ります。これらのポインタを逆参照(*n1と*n2)することで、メモリに格納された実際の値を交換するため、main()側で更新後の数値が見えます。swap()は引数を直接変更するためvoidを返します。

例2: ポインタ経由での値のインクリメント

#include <stdio.h>
void addOne(int *ptr) {
    (*ptr)++; /* 与えられたアドレスの値をインクリメント */
}
int main(void) {
    int i = 10;
    int *p = &i;
    addOne(p);
    printf("%d", *p); /* 11を出力 */
    return 0;
}

ここでは、pがiのアドレスを保持します。addOne()関数は同じアドレスを受け取り、逆参照して元の値をインクリメントします。呼び出し後、*p(ひいてはi)は新しい値11を反映します。

これらの例は、ポインタ渡しの威力を示しています:関数は自身のスコープ外で定義された変数を変更でき、不要なコピーなしで効率的なデータ操作が可能になります。

C言語

  1. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  2. C# ビット演算子とビットシフト演算子をマスターする:包括的ガイド
  3. C# クラスとオブジェクト:堅牢な OOP の基礎
  4. C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
  5. C# 部分クラスと部分メソッドを理解する
  6. C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
  7. C言語で1次元・2次元配列を関数に渡す方法 – 実践ガイド
  8. C言語ポインタ完全マスター: 実践的エキスパートガイド
  9. C言語における配列とポインタの関係を理解する
  10. C言語 構造体とポインタ: 実践ガイド
  11. C言語の定数とリテラル:型、使い方、ベストプラクティス