重拾C语言之指针篇(三)

指针常量与常量指针

常量是不可修改不可赋值,在程序运行中其值是不会改变的。

c语言中声明一个常量指针形式如下:

1)常量指针

const int *p;


int const *p;


常量指针顾名思义是一个常量的指针,指向的是一个常量,这个常量能通过指针访问,但不能通过指针修改它的值。

void main()

{

int a = 100;

int b = 200;

const int *p = &a;

*p = 200;//非法,p指向的是一个常量,*p并非左值,不可赋值

p = &b;

printf("*p的值 :%d",%p);

}

从上,我们可以看到常量指针指向的值是常量不可更改,但指针的值是可以修改的。


2)指针常量

声明一个指针常量:

int a = 100;

int b = 200;

int *const p = &a;

p = &b; //错误,p是常量 不可赋值

指针常量表示指针是一个常量不可赋值。因为指针常量是一个常量,所以在声明的时候一定要赋初值。



指针的应用-----(链表的简单实现)

我们知道,链表的地址是不要求连续的,这使得空间利用率高


链表保存的内容包含数据和指针,指针指向下一个节点,如上图。

接下来,我们利用指针,实现简单的链表:


struct MyLinklist   //定义一个结构体
{
int num;   //保存内容

struct MyLinklist *pNext;  //保存指针
};


typedef struct MyLinklist list;  //为结构体取别名

void add(list **phead, int num)
{
if (*phead == NULL)  // *phead为空,首位
{
list *newList = malloc(sizeof(list)); //分配内存
newList->num = num;  //为num赋值
newList->pNext = NULL; //为指针变量赋值
*phead = newList;    //初始化头指针
}
else
{
list *p = *phead;
while (p->pNext!=NULL)
{
p = p->pNext;//指针循环后移,直到最后一个节点
}
list *newList = malloc(sizeof(list)); //分配内存
newList->num = num;  //为num赋值
newList->pNext = NULL; //为指针变量赋值
p->pNext = newList;  //为上一节点的pNext赋值
}
};


void main()
{


list *head = NULL;
add(&head, 20);
add(&head, 30);
add(&head, 40);
add(&head, 50);
printf("添加后的数据,第0个:%d \n", head->num);
printf("添加后的数据,第1个:%d \n", head->pNext->num);
printf("添加后的数据,第2个:%d \n", head->pNext->pNext->num);
printf("添加后的数据,第3个:%d \n", head->pNext->pNext->num);


}

以上,我们实现了简单的链表,可以通过add()方法像链表中添加简单的数据。我们可以看出,链表实现空间不连续是利用指针。末位节点地址栏为空没有指向。


下篇,我们继续讲解指针,利用指针对链表进行简单遍历和删除。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值