【C语言】指针大法好!

42 篇文章 5 订阅
31 篇文章 4 订阅

指针是C语言中一种特殊的变量类型,与其他类型的变量不同,指针存储的不是变量,而是变量的地址,正确的使用指针,可以使程序更为简洁高效。指针是C语言中的精髓,同时也是C语言中最难掌握的部分。

指针与指针变量

1,指针的概念
如果在程序中定义一个int a ,那么编译器会根据变量类型,为其分配4个字节地址连续存储空间,若这块空间的首地址为0x0037FBCC,那么这个变量占据0x0037FBCC - 0x0037FBD0(十六进制)这四个字节的空间,0x0037FBCC就是这个变量的地址。因为通过变量的地址可以找到该变量所在的储存空间,该指针是指向该变量的指针。

2,指针变量的定义
指针指示某个变量所在的储存空间,相应的,指针变量存储这个指针,定义指针变量的语法格式如下:

变量类型* 变量名

上述语法中,变量类型指定定义的指针指向数据的类型,变量名前的星号表示该变量为一个指针变量。举例说明:

int* p;   // 定义一个int* 型的指针变量 

其中*表示p是一个指针变量,int表明该指针变量指向一个int型数据所在地址。

3,指针的初始化
指针变量的赋值有两种方法,一种是接收变量的地址为其赋值,如下所示:

int a = 10; 
int* p;   // 定义一个int* 型的指针变量
p = &a;   // 使int*型的指针变量p指向int型变量a所在的储存空间 

另一种是与其他指针变量指向同一块存储空间

 int* q;
 int* p;
 p = q ;  //使int型的指针变量q和p指向同一存储空间 

在第一种方法中出现的&是取址运算符,作用是获取变量a的地址。该符号在输入函数scanf()中也有出现,这是因为,数据只能由实参传递给形参,而不能反向传递,所以只能通过获取变量地址来对该变量进行操作,也可以在定义的同时为指针的变量赋值,形式如下:

int a = 10; 
int* p = &a;   // 定义一个int* 型的指针变量

指针变量的引用
所谓的指针变量的引用,就是根据指针变量中存放的地址,访问该地址对应的变量,访问指针变量中指针所指的变量非常简单,只需要在指针变量名之前加一个取值运算符 * 即可,格式如下:

* 指针变量名

具体实例如下:

int a = 10;
int *p = &a;
printf ("%d\n",*p);  // 输出的指针变量指向的地址中存储着数据

如上是先访问存储a的地址,*p,然后获取a的数据,所以为间接访问

printf ("%d\n",a);

如上是直接对变量进行访问,称为直接访问。

虽然间接访问比较麻烦,但在如下场合,只能使用间接访问:

  1. 用户申请一块内存空间时。因为该内存空间没有对应的变量名,所以只能通过首地址对其进行操作。
  2. 通过被调函数改变主调函数(主函数)变量的值时。由于值只能从实参向形参传递,所以被调函数无法通过改变形参的值去改变主函数中变量的值,只能通过间接访问指针向内存空间来改变函数中变量的值,scanf()函数就是一个很好的例子。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值