2022 03月20日
作者: 小白哥
  • 浏览: 1538
  • 收藏:0
  • 点赞:2
C语言指针初探

注意:1.以下所有代码及运行结果均在VS2017编译器下成功编译和运行。

        2.文章里面的代码笔者会省略#include,int main()等,仅展示一部分代码,以减少文章篇幅。

首先声明一个整数和一个整数指针:

int i;

int *p;

单纯地看这两个家伙,你会觉得这两个家伙长的好像。就是指针多了一个*号而已。既然长的像,那会不会有什么关联呢?肯定是有关联的,既然i是个变量,那么p也应该是个变量,只不过变量i存的是个整数值,变量p存的是地址而已。一般情况下,我们不想用到变量p存的地址的时候,就可以用*号把变量p存的地址所对应的值取出来。接下来,我们通过编程来看看:

int i;

int *p;

i=2;

p=&i;

printf("%p,%p,%d,%d\n", p,&i,*p,i);

运行结果为:00BCFE88, 00BCFE88, 2,2

从以上代码及运行结果可以看出,指针p就是变量,只不过它存的是i地址,而我们不想要它存的地址的时候,就可以利用*号来把地址所对应的数值给取出来。

这又带给我们一个思考,既然指针p是变量,能不能对指针p取地址呢?接下来,我们通过编程来看看:

printf("%p,%p,%d,%d,%p\n", p,&i,*p,i,&p);

运行结果为:003AF940, 003AF940, 2,2,003AF934(地址值每次编译会不一样)

通过这个,我们更能初步理解指针了。指针就是变量,它也有地址,只不过在它的这个地址下所存的东西,也是个地址。变量i也有地址,只不过在这个地址下所存的是一个数值而已。但是,指针p可以用*号把它存的地址所对应的值给取出来。

我们可以这样来理解:

p<-->&i

*p<-->i

接下来,让我们又来看看一个不可思议的现象,通过编程:

printf("%d, %d, %d\n", sizeof(int*), sizeof(char*), sizeof(double*));


printf("%d, %d, %d\n", sizeof(int), sizeof(char), sizeof(double));

运行结果为:  4, 4, 4

                      4, 1, 8

  int的大小为4字节,char的大小为1字节,double的大小为8字节(在笔者的编译器及电脑运行的情况下)。那为什么指针都是4个字节呢(在笔者的编译器及电脑运行的情况下)?这个我们可以这么理解,指针变量存放的是地址,我们可以看到上面打印出来的地址都是16进制数且都只有8位,而每一位16进制数代表着4位二进制数,因此一个地址就代表了32位二进制数,这不正好是4个字节吗(一个字节由8个二进制位组成)?换句话说,只需要4个字节就可以保存指针变量了。当然,这要根据cpu,编译器,操作系统而定。至少,在笔者的编译器和电脑运行下,不同类型的指针大小就是4个字节。

  关于指针的一小部分知识,笔者就先介绍到这里。 



  

发表评论

评论列表


没有评论

筛选

文章分类

热门文章

BC1.2协议介绍

2023-06-14  浏览:3891次

企业招聘网址

2023-12-07  浏览:3768次

USB2.0速度识别

2023-10-23  浏览:2038次