一、 指针定义:
指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是存储地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。
二、 遇到的问题:
今天上午用c语言复习单链表时,在赋值时出现取不到值的问题,让我很疑惑。
后面我仔细看了几遍,发现我要操作的是给指针赋值,按理来说我应该把指针的地址传进去,我天真的以为,我传进去的指针不就是地址吗? 其实不然,
例如:int a=0; int * p=&a;
我们传进去的指针变量其实是它指向的变量的地址,所以说,如果我操作的是a的值,那我可以传指针变量的值进去即可。 但是如果我要操作的是p的值,那我就要把p的地址传进去。
对于上面的问题,我应该把方法改成:
bool InitList(LinkList &L);
bool Empty(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;
}
}