登陆

极彩在线手机版-C言语的魂灵|“指针”

admin 2020-02-14 231人围观 ,发现0个评论

什么是指针?从根本上看,指针是一个值为内存地址的变量。

——《C primer plus》

指针,一直都是C语言的重点。初学C的人可能只是知道,它是变量的地址,但却极彩在线手机版-C言语的魂灵|“指针”不知道,学这个变量的地址有什么用。指针的伟大之处其实并不在语言本身,而是在于它和结构体搭配产生的一种叫数据结构的东西。如链表队列栈,树图等。所以,虽然在现在指针用到的地方不多,但还是要好好掌握这个知识。

&和*

在我们之前有学到那么一个运算符是&取地址符,它的作用是返回变量寄语的地址,我们现在要获取一个变量的地址,让它赋值给一个指针变量,可以这样子操作。

1inta=0;

2int*p=&a;

这样我们就把a的地址赋值给了p这个指针变量,注意指极彩在线手机版-C言语的魂灵|“指针”针变量是p而不是*p。上面也代表着p这个指针变量指向了a。如果你想声明double类型的指针就可以把上面两个都换成double。为什么都要换掉,去区分开不同类型的指针呢?每个指针变量的空间大小都是一样的,因为它只是储存地址,都是指针变量。既然用到的空间一样,那我们指针就指针呗,要区分int,double指针干嘛极彩在线手机版-C言语的魂灵|“指针”。这个问题我们留到下面指针的加法来讨论。

指针的存储

指针是按照16进制储存在指针变量中的,用%p对极彩在线手机版-C言语的魂灵|“指针”一个指针变量进行printf操作,可以得到指针的16进制地址。

这样子,就是把p所指的内容a赋值给了x。

1printf("%p",p);

指针的操作

对于* 这个运算符,用在声明的时候表示的是声明一个指针变量,就像上面那样。声明了一个int型的指针变量。

除了声明之外,用*对一个变量进行操作就可以对它地址上的内容,也就是这个指针所指的变量进行操作。如赋值:

1intx=*p;

这里我们就将p这个指针变量所指向的内容。如果p指向的是a变量,那么给x赋值的就是a的值。

解引用后的四则运算

1(*p)=(*p)+1;

为什么要括号呢,因为在这里我们可以更加直观的看极彩在线手机版-C言语的魂灵|“指针”出,是p指向的指针在进行加法而不是p这个指针变量在进行加法。

指针与一维数组

在上一篇的数组中,我们讲到了数组名是数组的地址,而在这篇文章中,我们又提到了指针是一个储存地址的变量,那这样的话,数组和指针是有关联的。

如果我们要数组第一个元素的地址,可以如下

1inta[10];

2int*p=&a[0];

如果我们要数组的地址,可极彩在线手机版-C言语的魂灵|“指针”以如下

1int*q=a;

我用%p打印出来出来后是下面这两个(不同机器的地址会和这里不一样)

1000000000065FE20

2000000000065FE20

虽然它们的地址是一样的,但是这两个指针的类型是不一样的,第一个指的是数组的第一个元素的地址,第二个指的是整个数组的地址。

指针+整数

当给指针加上整数的时候,因为指针指的是地址,所以当我们用指针加整数的时候就是原来的地址加上指针类型*要加的整数。

就拿一个小区来说,每个房子之间的距离是4米(模拟int的字节数)。如有一家的门牌号是3。你给地址加一个数字,它的地址会加上4乘上这个小区的房子距离。就会是第4个门牌号的房子的地址。

如果你在另一个小区,房子间的距离比较大了,为8米(模拟double的字节)。也是假如有一家的门牌号是3。你给地址加一个数字,那么这个时候,给地址加上的应该是这个小区的房子距离8乘以加的数字。才可以得到准确的房子地址。

这就为什么我们要区分不同的指针类似了。在两个小区中,计算一开始的地址都是3,但是因为小区的房子间距不一样,所以它们需要加的那个数字就会因为这个距离而变化,不只是看这个整数。

举一个数组和指针的例子

1inta[10];

2printf("%d",*(a+3));

以上会打印出a[3]这个变量,因为我们在解引用前先对指针+3,让它移动到了a[3]的位置。给他解引用后就是a[3]的值了。

指针减整数

这个指针减去整数就和上面的指针加整数差不多,就是减去指针类型*要减的整数。要注意的是当它用在数组名上时,不要让指针指在数组外面。

指针减指针

可以想一下,当两个门牌号相减的时候会得到什么?是两个房子的门牌号之差,而不是两个房子的距离。这里要注意的是,指针减指针一般是用在数组中,例如

1inta[10]

2intx=&a[3]-&a[0];

这就是指针的一些基本知识了,关于二维数组用指针表示,这里不多写了。如果你觉得不懂这二维数组和指针的关系的话,或者对于文章内容有什么建议,可以关注我,我来替你解答!

“全球最大的C/C++人员聚集地就在我这里,企鹅裙馊直播编程学习,【14】就是我的。不管你是什么基础,来了就是兄弟,是兄弟就跟我一起学习C/C++!关注我,为编程点赞,每天学点小知识!工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以跟我学习,技术大牛、学习资料等助你早日成为一名优秀的程序员!


请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP