初学C指针 心得(上)

文章介绍了C语言中变量的地址和值属性,强调了C语言对地址的直接操作特性,使得它在高级语言中显得较为底层,尤其适用于嵌入式编程。指针作为地址的引用,通过声明如`int*p`定义,`&`用于获取变量地址,`*`作为间接运算符用于解引用操作。错误地将指针赋值为常量会导致野指针问题,而`*p=10`这样的语句则是通过解引用给指针所指向的内存位置赋值。
摘要由CSDN通过智能技术生成

        我们在编写程序时,可以认为变量就仅有两个属性:名称和值,可是计算机在编译程序时认为为变量就只有地址和值两个属性。很多编程语言都无法对地址进行直接操作,但c语言可以对地址进行操作,通过“&”与指针变量可以操控地址。因为这一属性,c语言在高级语言中算是比较贴近于硬件的了,所以从某种程度上说,c语言是高级语言中的“低级语言”,因为比其他高级语言更加贴近于硬件,所以在嵌入式编程中通常都是用c语言编程的。

        对于指针,我们听过这么一句话“指针就是地址”。这句话很好地阐明了指针这个概念。我们要谈指针,肯定要先声明它,因为指针也是一个变量,要使用它就得先声明它,声明它的语句如下:

int * p;

这里用到了一新的形式,int后面加上*,这里的*和我们的乘不同,它是一个新的符号,叫做间接运算符或解引用运算符。

        int * p;    实际上就定义了一个指针变量p,它的任务就是指向一个地址,所以用p的时候后面通常要跟一个地址。

p=&a;

        它的意思是把a的地址传递给p,这样p就得到了一个地址,就变得有意义起来了。所以图示为

P-->a的地址-->a的内容

所以当有一个   P=10;这条语句出现时就直接是报错了。这条语句通常是被认为是野指针。p是指针变量,只能对地址操作,而常量不是地址,所以就直接出错。

        但下面的这条语句就是可以的了:

p=&a;
*p=10;

为什么加上一个“*”就可以跟一个常量呢?其实这正是间接运运算符(解引用运算符)的奥妙所在。间接指的是p以前是直接引用a的地址,加上*以后就变成了间接通过引用a的地址来引用a地址下的内容。解引用就是解开了p-->a的地址这层引用,然后成了p--﹥a的地址下的内容,*的含义便在其中。

    一般专业程序员比较喜欢在声明指针时将*与p用空格隔开。我感觉主要是因为比较方便看p与*p的类型。语句int * p。可以看到,*p用后,还剩一个int,所以*p是一个int型的,能跟一个常量。然而用p的话还剩一个int *,所以p是int *型,即指针型,只能跟地址。

    通过以上分析,就慢慢理解了指针的含义了。…………

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只intp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值