怎么理解C语言中的指针,如何运用?


C语言指针该怎么理解这个问题,真的是有1000个人能给出1000个答案。我觉得,在这里我可以给出我理解并整理的一个答案。

对于C语言指针,我认为可以从“两己三他”的维度来理解。所谓的“两己三他”,展开来说,就是“己址,己值,他址,他值,他型”。详细论述,建议题主知乎上搜索我写的一个文:从5个维度来看C语言指针(指针就是个纸老虎)。

大概来说:

  1. 己址:就是自己的地址的意思。就是指针变量也有自己的地址;
  2. 己值:就是自己的数据值的意思。就是指针变量也有自己的数据值;
  3. 他址:就是他人的地址的意思。指针变量的己值,其实就是他人的地址;
  4. 他值;就是他人的数据值的意思。指针变量的己值是他人的地址,那么就可以通过指针变量获取到他人的数据值;
  5. 他型:就是他人的类型。你以为声明指针变量时的类型,是指指针吗?你错啦!

我这里写一段C语言代码,大概解释下“两己三他”的意思。



C程序也很简单,里面有一些关于指针常见的C语言代码写法。

pInt = ¶;这条语句的本质,其实就将变量para的地址给了指针pInt的己值。

printf("%x \\n\

C语言编程答疑


恰好我之前写了一系列介绍 C 语言的文章,介绍了什么是指针,以及为什么要使用指针,下面摘录一部分,感兴趣的话,可以点我了解更多。


什么是 C语言指针?


不同的数据类型的主要区别在于占用的存储空间不同。我们知道,C 程序是运行在计算机的内存中的,因此 C 程序的变量也是存在于内存中的。C 标准规定 char 类型占用一个字节的存储空间,对其他整型却没有做规定,现在为了解释的方便,我们假设 int 类型的数据占用内存 4 个字节。

假设我们如下定义了两个变量:

signed char i = 3;int j = 8;

那么,i 占用了 1 字节的内存空间,j 占用了 4 字节的内存空间,请看下图。

方框表示内存空间,内部表示存储的值。我们把内存逐字节编号,方框外部的数字表示方框的编号(这样的内存“编号”即所谓的“内存地址”)。修改变量 i 的值,实际上就是修改地址为 4000 的内存空间里的值。那反过来呢?如果我修改了地址为 4000 的内存空间里的值,i 的值会相应改变吗?答案是肯定的,请继续往下看。

上图中的内存地址“4000”是我为了解释方便随意取的。那么,在实际应用中,变量 i 的地址如何获取呢?C 语言提供了“&”运算符,就是获取变量地址的。请看下面的例子:

#include <stdio.h>
int main()
{
signed char i = 3;
int j = 8;
long p1 = (long)&i;
printf("p1: %ld \

嵌入式时代


C语言指针是C语言中最基础同时也是难点之一,很多学习过C语言的都知道指针,最基本的用法也都知道,但是深入学习C语言就知道指针是C语言的灵魂,难点就是了解指针全面用法,以及指针和指针变量的关系。

C语言指针本身难度并不大,最让人头痛的是它的繁琐。C 语言最显著的特点,就是因为它里面有指针。

要了解指针以及指针的运行,首先我们先了解数据保存过程的与我们如何读取保存过数据的内容。

我们都知道内存单元是字节,在程序中定义某个变量之后,当系统对其进行编译时就会分配到内存单元字节,每个单元自己都有自己的编号,当然就会有给它一定长度的空间,也就是地址。

由于我们可以通过地址能找到变量单元,也可以说该地址“指向”该变量单元,所以在C语言中,地址就称为“指针”,明白一点就是通过“地址”能找到对应的内存单元,每个变量地址都对应一个变量指针。

至于如何运行,上面也说了指针的作用就是存储地址值,即操作内存。



Software科技言


指针是一种的变量的类型,这种变量存储的值是一个内存地址。

在C语言中,每定义一个变量,编译器都会为其分配变量类型对应大小的内存,内存的起始地址就是变量的地址,内存存储的内容就是变量的值。

int i; //编译器为变量名为i的变量分配了内存。

通过变量名,我们可以读写变量的值。

i=10;//写入数值10到名为i的变量。

printf("%d\

计算机软件知识


1 内存是个大楼,楼中有许多房间,每个房间只住八个0或者1;

2 每个房间都有门牌号,这个号从零号开始,最大就看内存条大小了,这个门牌号就是地址;

3 内存中存储数字的房间可以分为两种,一种是存储普通的数字,一种存储其他房间的门牌号(地址),存储其他房间门牌号的房子,就是指针,这些房间在C语言上都称为变量;

4 任何一个变量都有地址,如同所有房间都有门牌号,可以通过:

&变量

来获得这个变量的存储地址,保留的话只能存进指针变量中去。

5 可以通过*运算,按一个指针变量中存储的地址、取出那个地址中存储的数。

简单描述,更多内容好好看教材。


素食的猫


看看我新发布的视频,也许指针不再难了。


IT老者


首先需要理解所有的变量都是放在内存里的,当然也有一些是寄存器变量暂时可以忽略。而指针则是指向某一个内存地址的一个变量。指针可以指向字符,整形,函数,结构等各种类型的数据。而指针变量本身就是需要分配内存。我们公司是做嵌入式的代码里指针是非常普遍的,模块句柄,动态内存分配,模块交互的结构体里面也会很多函数指针等等。总而言之指针是c语言的核心,还有不懂的可以关注我私信哦


程序员T哥


写一写汇编语言,就会明白,指针就是间接寻址!



sharpxcb


我就是在头条理解指针,不同的人不同理解,都参考下,我本来是用FLash AS3研究中国象棋人机对战,遇到算法来学C,终于入坑了


西瓜61912


别把指针特殊化,把它想的和其他普通变量一样,只不过别的变量里存的是数字或字符串,它里面存的是内存地址,这个内存地址指向一块内存区域,里面存的是值,当然可能是数字或字符串,或者又是一个指针。在学习时,千万别把它特殊化看待,甚至妖魔化了,否则就会转不过弯来。

/<stdio.h>


分享到:


相關文章: