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