C言語のvoidポインタをマスター:柔軟で効率的なコードを実現
プログラミング言語には、コーディングを大幅に容易にする概念があります。例えば、C言語ではvoidポインタがエンドユーザーの入力から特定のデータ型を決定します。これにより、C言語におけるvoidポインタの議論につながります。
他のポインタと同様に、voidポインタもその柔軟性のために重要な機能を持っています。しかし、コーディングの時間を節約したい場合、あなたの頼りになるポインタ関数はvoidポインタです。このポインタを使用すると、異なるオブジェクト型を同時に格納および取得できます。さらに、C言語におけるvoidポインタを用いたコーディング技術について学びます。
(プログラミング言語のイメージ)
1. C言語におけるvoidポインタとは?
一般的に、voidポインタは関連するデータ型を持たないポインタです。つまり、空のコンテナのようなものです。この機能により、未知のデータ型の変数のアドレスを保持できます。
C言語のvoidポインタ機能により、それらを他のデータ型に型キャストできるため、メモリ割り当てが容易になります。これにより、バイト単位のメモリ割り当てなどの柔軟な機能が可能になります。さらに、C言語のvoidポインタは汎用関数の実行を助けます。
(C言語でのシンプルな「Hello World」プログラム)
https://commons.m.wikimedia.org/wiki/File:C_Hello_World_Program.png
2. C言語におけるvoidポインタの動作
全体として、ポインタ機能はプログラミングに不可欠です。少なくとも、アドレス管理とメモリ割り当てにおけるその重要性がわかります。
ポインタには2種類あります:汎用ポインタとvoidポインタ。ここではvoidポインタとC言語での動作に焦点を当てます。
C言語でvoidポインタを持つには、「void」キーワードで情報を宣言するだけです。
全体として、参照と間接参照は汎用ポインタの概念で役割を果たします。この場合の間接参照は、ポインタ変数に格納された値を取得することです。
したがって、ポインタ値が利用可能なデータ型に関連付けられていない場合、型キャストが選択肢となります。
ただし、voidポインタは算術演算を一切サポートしないことに注意してください。代わりに間接演算子「*」を使用します。そのため、関連するデータ型がない場合、型キャストが必要になります。型キャストは、voidポインタとともに宣言されたデータ型に関連付けます。そうしないと、プログラム実行時にコンパイラエラーが表示されます。
voidのサイズは、C言語の文字ポインタと似ています。サイズオブジェクトはポインタプラットフォームによって異なります。
これらのメモリ管理関数はmalloc()とcalloc()です。これらは必要なデータ型のメモリを割り当てるのに役立ちます。ある意味で、メモリ割り当ては関数ポインタが他の機能を拡張する形式を使用します。
(C言語でのポインタの動作を示す図解)
https://commons.m.wikimedia.org/wiki/File:C_pointer_3.svg
3. voidポインタの構文
通常、プログラミング機能をインポートするには正しい構文を使用するのが最善です。したがって、C言語でのvoidポインタの構文は:
void *pointer_name;
ここで「void」はポインタの種類のキーワードです。そして、アドレス割り当てを行うポインタの名前があります。
以下の例を見てみましょう:
int b = 6
char c = 'z';
したがって、voidポインタ変数を含める場合:
void *p = &b; // voidポインタが整数'b'のアドレスとしてint 'b'を割り当て保持
p = &c; // voidポインタがchar 'c'のアドレスも保持
さらに、いくつかの構文例を示します:
int i=6; // 整数変数の初期化
int *p; // 整数ポインタの宣言
void *ptr; // voidポインタの宣言
float *fp; // 浮動小数点ポインタの宣言
p=fp; // 無効なポインタ
ptr=p; // 有効なポインタ
fp=&i; // 無効なポインタ
ptr=&i; // 有効なポインタ
ptr=fp; // 有効なポインタ
4. C言語におけるvoidポインタの例とサンプルコード
次に、voidポインタ引数の例を以下のコードスニペットで見ていきます:
サンプルコード #1
最初のコードサンプルでは、malloc()関数の使用方法を示します:
#include <stdio.h>
#include<malloc.h>
int main()
{
int a=90;
int *x = (int*)malloc(sizeof(int)) ;
x=&a;
printf("pointed value by x pointer : %d", *x);
return 0;
}
出力
サンプルコード #2
次のコードでは、型キャストの概念を示します。
#include <stdio.h>
int main()
{
void *ptr = NULL; // voidポインタ変数
int *p = NULL;// 整数ポインタ変数
char *cp = NULL;// 文字ポインタ変数
float *fp = NULL;// 浮動小数点ポインタ変数
// voidポインタのサイズ
printf("void pointer size = %d\n\n", sizeof(ptr));
// 整数ポインタのサイズ
printf("integer pointer size = %d\n\n", sizeof(p));
// 文字ポインタのサイズ
printf("character pointer size = %d\n\n", sizeof(cp));
// 浮動小数点ポインタのサイズ
printf("float pointer size = %d\n\n", sizeof(fp));
return 0;
}
出力
それ以外の場合、以下のビデオリンクでC言語でのvoidポインタコードを参照してください。
https://youtu.be/-503stjWLhc
5. voidポインタの用途
voidポインタはC言語プログラミングにおいて非常に重要です。
- 任意のデータ型の変数を指すのに役立ちます。
理解を深めるために、以下のコードサンプルを参照してください。それらには以下が含まれます:
#include<stdio.h>
void main()
{
int num=10;// 通常の変数を初期化
void *ptr;// voidポインタを宣言
ptr=#// Ptrポインタをnumに指向
printf("The value of integer variable is= %d", *ptr );
}
しかし、このコードを実行するとコンパイル時エラーになります。同じコードで型キャストを使用してポインタを間接参照すると、望ましい出力が得られます:
#include<stdio.h>
void main()
{
int num=10;// 通常の変数を初期化
void *ptr;// voidポインタを宣言
ptr=#// Ptrポインタをnumに指向
printf("The integer variable value is %d", *(int*)ptr );// 型キャストを使用した間接参照
}
整数変数の値は 10 です。
したがって、型キャストによってvoidポインタを間接参照できます。
voidポインタではポインタ演算が無効ですが、型キャストがその問題を解決します。出力は次のようになります:
(voidポインタはデータ変数の位置を明らかにすることでコーディングを容易にします)
- calloc()とmalloc()で、voidポインタはすべてのデータ型のメモリ位置を割り当てるのに役立ちます。
説明のために、以下のコードを参照してください:
int main(void)
{
// malloc()関数がvoid *を返すことに注意
// 続いて、char *, int *など任意のデータ型に型キャスト
int *x = malloc(sizeof(int) * n);
}
注:上記のプログラムはC言語でのみコンパイルされます。
- 最後に、voidポインタ変数はC言語で汎用関数を実装するのに役立ちます。
結論
voidポインタ機能は、一般的に不可欠なプログラミングツールです。プログラマーは、データ型が関連付けられていないため便利だと感じます。少なくとも、異なる値やデータクラスを相互に指し示すポインタの混乱を排除します。したがって、voidポインタは過剰な型キャストを減らします。汎用ポインタタイプのデータもサポートします。したがって、汎用コンパイラでもあります。
C言語でのvoidポインタの操作に関する完全なガイドが得られました。しかし、問い合わせや他のプログラミングリソースが必要な場合は、お問い合わせページをご利用ください。
産業技術