美文网首页
C语言指针专题——指针难学的4点原因

C语言指针专题——指针难学的4点原因

作者: 胖一一 | 来源:发表于2019-02-26 21:48 被阅读0次

前一篇跟大家聊了聊指针的概念,可是就算了解了指针是什么,为什么依然感觉难学?我试着从几个点切入,聊聊指针难学之处。

难点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,让人眼花缭乱,能不烦不。

本文先提这4点指针难点,也许还有其它的难点,本文也不赘述了。不管怎样,指针虽难,但是只要理解其本质,那么理解指针,或者理解一段包含指针的代码,或者写一段含有指针的代码,只是时间问题。

相关文章

  • C语言指针专题——指针难学的4点原因

    前一篇跟大家聊了聊指针的概念,可是就算了解了指针是什么,为什么依然感觉难学?我试着从几个点切入,聊聊指针难学之处。...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 想往C/C++游戏编程发展的你,还没学会C语言指针!

    我最近跟很多在学C语言的年轻人聊天,发现一个普通的痛点——C语言指针很难学!这时候我就会说:指针,传说中是C语言中...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • C语言专题-指针

    指针重要性: 表示一些复杂的数据结构快速的传递数据使函数返回一个以上的值能直接访问硬件能方便的处理字符串是理解面向...

  • C语言指针专题——如何理解指针

    指针,传说中是C语言中的一个难点,且是难点中的难点。本文在教材的基础上,再详细地谈谈“指针”这个东东,力争让大家能...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • Mr_二狗[自修+总结杂记]指针概念复习

    学习C语言最难学的就是指针!多练习,多思考! 练习一: #include int calc(int x) { x ...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

网友评论

      本文标题:C语言指针专题——指针难学的4点原因

      本文链接:https://www.haomeiwen.com/subject/ftxtuqtx.html