我个人觉得本网站的C语言指针方面讲的非常的抽象并且短。我个人不太好理解。所以,我想写一篇文章来让自己巩固巩固。

什么是指针?

指针,看名字就知道肯定指向某个东西,那这个东西到底是什么?

我们知道变量名这个东西,就是我们命名的各种代号,例如:a,b,c什么的,这些东西我们常常要给它赋值,例如:123,456之类。那么计算机怎么处理这些值呢?总不能凭空放置吧?是的,这些值占用着内存。

数据内存地址
100000001
200000010
300000011

(上面的内存地址是我瞎编的啊,不要在意,只是方便我理解。)

我们会发现数据和内存之间是一一对应的关系。(好像指针没用啊?不急,等我们涉及到数组的修改和删除问题,指针就起大作用了,就是链表,这里提一下,不讲。)

那么指针存放的是数据还是地址呢?这里明确说一下,指针存放的是地址

1701168248998311.png

如何用代码表示呢?总不能直接int p;吧?电脑还以为你声明了一个变量p,类型是整形呢。

上代码演示如何声明一个指针变量(这里以整形指针变量为例)!

#include<stdio.h>
int main()
{
    int *p;
    return 0;
}

那*是啥?*是间接引用运算符,它可以访问指针变量所指向的变量的值。啥意思呢?

我们上代码来试一下。

#include<stdio.h>
int main()
{
    int a=2;
    int *p=&a;    //等价于int *p;p=&a;这样可能比较好理解
    printf("%p\n",p);
    return 0;
}

得到了

353a8f14

这个结果(当然每个人的电脑内存地址可能不一样)。就是数据2的内存地址了。

可以知道指针变量p存放的是数据2的内存地址,那么*p是什么呢?

#include<stdio.h>
int main()
{
    int a=2;
    int *p=&a;    //等价于int *p;p=&a;
    //printf("%x\n",p);
    printf("%d\n",*p);
    return 0;
}

得到

2

也就是说*p也就是a,也就是数据2。有没有恍然大悟?

总结:指针存放的是地址(指针变量存放地址,*指针变量存放数据)。


接下来上难度。既然指针变量可以指向变量,那可不可以指向数组?字符串?以至于跟函数、结构体等合并使用?

答案是可以!

我们放到后续的文章中一一描述。

本人是新人,如有讲的不清楚的或错误的地方,还请多多指正~欢迎补充~

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论