c语言指针赋值,c语言地址变成指针才能赋值

首页 > 教育培训 > 作者:YD1662023-06-24 13:59:34

图3 指针未指向变量输出错误

这种没有指向任何变量的指针被称为"野指针",注意不是"空指针",空指针和野指针是不一样的指针,野指针是非法的,空指针是合法的,关于空指针和野指针的区别为:

野指针是不知道指向什么地方的指针,它的出现主要原因是没有对指针进行初始化,或者指针所指向的内存块被释放之后,没有将该指针设置成空指针。

空指针是指指向NULL的指针,NULL为C语言定义的宏,为0,关于空指针我们后面会详细讲解。

我们前面说过,一个变量的地址是当我们在定义这个变量时由编译器主动随机分配的,因此如果我们在定义一个指针变量之后,随意地对其赋值,对于用户来说,我们不清楚哪一块内存地址可用,那一块不可用。那么这样操作是不是就是不合法的呢?其实并不是,比如我们在做单片机的时候,某一个外设的地址你可以从数据手册上面查到,那么我们此时要定义一个指针来指向这个地址,以便给后续的程序使用,那么这种情况下,我们势必需要显示地将一个地址赋值给这个指针变量。反过来说,指针就是由于可以任意地指向任何地方,所以一旦使用不当,比如将一个指针指向一些受保护的内存块并且修改这一块内容,那么会引起一些不可估量的错误。

如果对一个指针贸然地赋值一个常量,那么编译器会不知所措,在这种不知所措之下,编译器只会报一个警告,这个警告的中文意思就是,将一个int类型的变量赋值给一个(int *)类型的变量,如图4所示。

c语言指针赋值,c语言地址变成指针才能赋值(5)

图4 给指针赋值一个常量

正确的做法是,我们需要将这个常量强制转换成一个指针类型,关于强制类型转换其实很简单,只需要将这个变量或者常量前面用括号加一个你所需要转换的类型即可。如图5所示。

c语言指针赋值,c语言地址变成指针才能赋值(6)

图5 给指针赋值一个常量地址

现在我们来做一个实例,先定义一个变量a,假设这个变量a的地址是我们硬件某一个外设的地址,我们可以先编程获取其地址,如图6所示。

c语言指针赋值,c语言地址变成指针才能赋值(7)

图6 获取某一个变量的地址

接着,我们来定义一个指针变量,并且显示地将这个地址赋值给这个变量,接着,对这个指针所指向的内存进行赋值,我们来看看最终变量a里面的内容是否会跟着改变。既然模拟的是硬件,那么此时有个小提示需要注意,我们一定要用"volatile"关键词来修饰这个内存区域。如图7所示。

c语言指针赋值,c语言地址变成指针才能赋值(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.