博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C】 26_指针的本质分析
阅读量:6126 次
发布时间:2019-06-21

本文共 2309 字,大约阅读时间需要 7 分钟。

变量回顾

  • 程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?

思考: 下面的程序输出什么? 为什么?

void code(){    int i = 5;    int* p = &i;        printf("%d\n, %p\n", i, p);        *p = 10;        printf("%d, %p\n", i, p);}
输出:5, 0xbfbe125c10, 0xbfbe125c

* 号的意义

  • 在指针声明时,* 号表示声明的变量为指针
  • 在指针使用时,* 号表示取指针所指向的内存空间中的值
int i = 0;int j = 0;// 指针声明int* p = &i;// 取值j = *p;

clipboard.png

* 号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。

小贴士

int i = 0;int j = 0;int* p = &i;j = *p;

==>

变量 p 保存着变量 i 的内存地址,即 p<--> &i *p<-->i

实例分析: 指针使用示例

#include 
int main(){ int i = 0; int* pI; char* pC; float* pF; pI = &i; *pI = 10; printf("%p, %p, %d\n", pI, &i, i); printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI); printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC); printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF); return 0;}
输出:0xbffbb11c, 0xbffbb11c, 104, 4, 0xbffbb1184, 4, 0xbffbb1144, 4, 0xbffbb110分析:sizeof(int*)、sizeof(char*)、sizeof(float*)在一台机器上,地址宽度是固定的。例如,32位系统中,地址大小为4字节。因此不同指针类型的大小是相同的。

传值调用与传址调用

  • 指针是变量,因此可以声明指针参数
  • 当一个函数体内部需要改变实参的值,则需要使用指针参数
  • 函数调用是实参值将赋值到形参[栈开销]
  • 指针适用于复杂数据类型作为参数的函数中

编程实验:利用指针

#include 
void swap(int*a ,int *b){ int c = *a; *a = *b; *b = c;}int main(){ int aa = 1; int bb = 2; printf("aa = %d, bb = %d\n", aa, bb); swap(&aa, &bb); printf("aa = %d, bb = %d\n", aa, bb); return 0;}
输出:aa = 1, bb = 2aa = 2, bb = 1

常量与指针

  • const int* p; // p可变,p指向的内容不可变
  • const* int p; // p可变,p指向的内容不可变
  • int* const p; // p不可变,指向的内容可变
  • const int* const p; // p和p指向的内容都不可变

口诀: 左数右指

当 const 出现在 * 号左边时指针指向的数据为常量,当 const 出现在 * 号右边时指针本身为常量。

示例分析: 常量与指针

#include 
int main(){ int i = 0; const int* p1 = &i; int const* p2 = &i; int* const p3 = &i; const int* const p4 = &i; *p1 = 1; // compile error p1 = NULL; // ok *p2 = 1; // compile error p2 = NULL; // ok *p3 = 1; // ok p3 = NULL; // compile error *p4 = 1; // compile error p4 = NULL; // compile error return 0;}
输出:error: assignment of read-only location ‘*p1’error: assignment of read-only location ‘*p2’error: assignment of read-only variable ‘p3’error: assignment of read-only location ‘*p4’error: assignment of read-only variable ‘p4’

小结

  • 指针是 C 语言中一种特别的变量
  • 指针所保存的值是内存的地址
  • 可以通过指针修改内存中的任意地址内容

clipboard.png

以上内容参考狄泰软件学院系列课程,请大家保护原创!

转载地址:http://vdbua.baihongyu.com/

你可能感兴趣的文章
SEO工作之数据分析(一)
查看>>
查看命令运行所需要的库支持
查看>>
replace into… ON DUPLICATE KEY UPDATE
查看>>
怎么查服务的配置文件和端口号
查看>>
Ubuntu-11.10之 Samba服务器安装
查看>>
CSS选择器
查看>>
小米非常好!
查看>>
django 后台app设置中文名
查看>>
hadoop完全分布式安装配置
查看>>
配置ssh public key登陆时遇到的两个问题
查看>>
pxe安装
查看>>
Android
查看>>
linux 6.5 apache安装
查看>>
Android界面中包含ListView的屏幕截图问题记录
查看>>
写给小白的音频认识基础
查看>>
LNMP+Nagios server一键安装脚本
查看>>
Ubuntu默认root用户密码
查看>>
Jfinal和httl整合
查看>>
oracle 多表查询
查看>>
无业务不伸缩之一,云计算有ESS(基础篇)
查看>>