墨鱼崽崽


私信TA

用户名:dotcpp0714187

访问量:303

签 名:

等  级
排  名 10674
经  验 1072
参赛次数 0
文章发表 7
年  龄 23
在职情况 待业
学  校
专  业

  自我简介:

我个人觉得本网站的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分

2 人评分

  评论区

  • «
  • »