打印
[开发资料]

指针难学的4点原因

[复制链接]
312|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cemaj|  楼主 | 2022-12-21 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
难点1. 讨厌的星号
定义指针变量p时,都会加个*号。在用到指针变量p时,也会加个*号。比如以下代码:
int main()
{
    int *p;
    p = malloc(sizeof(int));
    *p = 1;

    return 0;
}


程序定义了一个指针变量p,前面有个*号;后面给指针p指向的内存区域赋值1,又有个*号,这两个*号有啥区别呢?很多初学者在这里会搞不懂。
定义指针p时,前面的*号只是告诉编译器,p是个指针,其它没什么用处。我个人一直认为,当初发明C语言时,定义指针p时不应该用*来说明,你可以用@号,用#号,用$号,随便用什么号来说明p是个指针,这样就不会与下面用到指针p时的*混淆了。
*p = 1这个语句的*号,起到的作用就是跨过指针p自己的值,直捣黄龙,取得指针p指向的存储区域。关于指针p自己的值,和指针p指向的值,可以参考我之前的文章。
所以*号出现在不同的位置,有不同的作用,这是刚开始学指针时难学的一个地方。
难点2. 分不清址与值
这里的址就是地址,就是很多教材喜欢说的指针变量是个地址,地址,地址。。。。地你妹啊,谁看得懂什么地址地址地址的!而值,就是指针p指向的数据。
还借用上面的代码,跟指针p相关的数据就两个,一个是指针p自己的值,程序中是明显看不到的,是程序运行时操作系统才能看到的,指针p自己的值就是教材中提到很多次的“地址”;另一个就是指针p指向的值,程序中就是常量“1”。
我认为很多教材只会讲地址,地址,地址,根本就没有讲清这个“址”与“值”这两者的区别,谁搞得懂。
难点3. 借助址来读值
指针有自己的值的概念,有指向的值的概念,两者的关系也是让初学者迷糊的。指针要借助自己的值,去找到指向的值,也就是借助址来读取值。
就像上面的代码片段,假设指针p自己的值是0x12345678,这就是一个内存区域的地址,借助这个址,再结合星号,就可以将整数1放在0x12345678这块内存中了。此时,指针p借助自己的值(0x12345678)指向了一个值(1)。
呵呵,借址读(写)值,已经让人晕了。
难点4. 链表结点
如果上述3点还不算变态的话,那么结合链表这种数据结构,那就相当的变态了。
比如链表的结点往往定义为一个结构体,就像这样:
struct node

{

    int i;

    struct node *next;

}


然后会有什么建立链表啊,插入链表啊,删除链表啊,哪一个操作不会用到指针next?
本来链表操作就让人烦了,再加上指针这个东东,真是烦上加烦。
可不是嘛,比如定义了一个结点变量指针p,如下
struct node *p;


然后你就会看到满程序都有p->next,说不定还有其它的结点变量指针q,再来个p->next = q->next,或者q->next = p->next,让人眼花缭乱,能不烦不。

使用特权

评论回复
沙发
Bowclad| | 2022-12-23 16:30 | 只看该作者
指针一旦理解了就很难忘掉了

使用特权

评论回复
板凳
Undshing| | 2022-12-26 11:50 | 只看该作者
绕过*和&的弯来就很容易了

使用特权

评论回复
地板
biechedan| | 2023-2-2 10:45 | 只看该作者
理解了觉得很简单,比高中的数学简单多了

使用特权

评论回复
5
jonas222| | 2023-2-2 13:54 | 只看该作者
这么灵活的东西,规则还是挺多的,学习起来要费点力气。

使用特权

评论回复
6
usysm| | 2023-2-2 14:31 | 只看该作者
学习到C语言的时候,理解起来很抽象

使用特权

评论回复
7
tabmone| | 2023-2-4 17:01 | 只看该作者
学习c语言的指针,把指针和硬件里内存的概念搞清楚

使用特权

评论回复
8
timfordlare| | 2023-2-4 18:33 | 只看该作者
我对C语言的指针觉得有难度              

使用特权

评论回复
9
belindagraham| | 2023-2-4 19:34 | 只看该作者
C的指针非常灵活,能够大大提高程序的运行效率。

使用特权

评论回复
10
cashrwood| | 2023-2-4 19:53 | 只看该作者
指针直接操作存储单元地址,比较抽象,所以难学。

使用特权

评论回复
11
1988020566| | 2023-2-5 14:27 | 只看该作者
C语言中指针很难学吗               

使用特权

评论回复
12
lihuami| | 2023-2-7 20:35 | 只看该作者
指针就是地址,多单步调试就能很快弄懂。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

3578

帖子

2

粉丝