【C言語】ポインタをパラメータとして渡す場合のよくある質問

 1. ポインタの定義:

        ポインタは C 言語の重要な概念および機能であり、C 言語を習得する上で難しい部分でもあります。ポインタはストレージ アドレスです。ポインタ変数はメモリ アドレスを格納するために使用される変数です。同じ CPU アーキテクチャでは、異なるタイプのポインタ変数が同じ長さのストレージ ユニットを占有しますが、データを格納する変数はデータのタイプに応じて異なります。占有されるストレージスペースも異なります。ポインタを使用すると、データ自体を操作できるだけでなく、データが格納されている変数アドレスも操作できます。

        ポインタはメモリ内のデータの位置を記述し、記憶領域を占有するエンティティと、この領域の開始位置からの相対距離値をマークします。C/C++ 言語では、ポインタは一般にポインタ変数とみなされます。ポインタ変数の内容には、それが指すオブジェクトの最初のアドレスが格納されます。指すオブジェクトには、変数 (ポインタ変数も変数です)、配列を指定できます。 、関数などがストレージスペースを占有します。

2. 発生した問題:

今朝、C言語で単一リンクリストを検討していたところ、値を代入する際に値が取得できないという問題に遭遇し、非常に混乱しました。

        後で何度か注意深く見てみると、やりたいことはポインタに値を代入することであり、論理的に言えば、ポインタのアドレスを渡す必要があります。渡したポインタがアドレスであると素朴に考えていました。 、そうでしたか?実際にはそうではなく、 

        例: int a=0; int * p=&a;

        渡すポインタ変数は、実際にはそれが指す変数のアドレスなので、 a の値を操作する場合は、ポインタ変数の値を渡すだけで済みます。しかし、操作したいのが p の値である場合は、p のアドレスを渡す必要があります。

        上記の問題については、メソッドを次のように変更する必要があります。

        bool  InitList (LinkList &L );

        bool  (LinkList &L );

 コード:

#include <stdio.h>
#include <stdlib.h>

/**
	定义链表存储结构 
*/
typedef struct LNode{
	int data;
	LNode *next;
}LNode,*LinkList;
int main(){
	bool InitList(LinkList &L);//声明 
	bool Empty(LinkList &L);//声明
	//先有变量再用指针,不然指针会指向一个我们不希望的地方 
//	LNode L;
	LinkList p=NULL;
	InitList(p);
	printf("成功初始化\n");
	Empty(p);
	 
	return 0;
}

/**
	初始化带头结点的链表 
*/ 
 bool InitList(LinkList &L){
 	L=(LNode*)malloc(sizeof(LNode));
 	if(L==NULL)return false;
 	L->next=NULL;
 	return true;
 } 
 
 /**
 	判断单链表是否为空 
 */
 bool Empty(LinkList &L){
 	if(L->next==NULL){
 		printf("链表为空\n"); 
 		return true;
	 }
	 else{
	 	printf("链表不为空\n");
	 	return false;
	 } 
 	
 } 
 
 
 
 
 
 

Supongo que te gusta

Origin blog.csdn.net/m0_56233309/article/details/126400651
Recomendado
Clasificación