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;
}
}