鱼C论坛

 找回密码
 立即注册
查看: 2706|回复: 3

[技术交流] 《带你学C带你飞》第二十一讲:指针

[复制链接]
发表于 2018-1-3 21:34:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、指针

(1)内存是如何存放变量的?通过变量名对变量进行访问和存储是为了方便程序员而设计的,其实在内存中完全没有存储变量名的必要。因为编译器知道具体每一个变量名对应的存放地址,所以当你读取某个变量的时候,编译器就会找到变量名所在的地址,并根据变量的类型读取相应范围的数据。(其实就一句话:变量名只是给我们和编译器看的,CPU只认地址)
(2)通常我们所说的指针,就是地址的意思。C 语言中有专门的指针变量用于存放指针,跟普通变量不同,指针变量存储的是一个地址。 指针变量也有类型,它的类型就是存放的地址指向的数据类型。(指针变量占四个字节,也就是说一个地址是占 4 个字节的空间。)
(3)定义指针变量: 类型名 *指针变量名。定义指针变量跟普通变量十分相似,只是中间多了一个星号(*)。如:
  1. char *pa;        //定义一个指向字符型的指针变量
  2. int *pb;        //定义一个指向整形的指针变量
复制代码

二、取地址运算符和取值运算符
(1)如果需要获取某个变量的地址,可以使用取地址运算符(&):
  1. char *pa = &a;
  2. int *pb = &f;
复制代码

(2)如果需要访问指针变量指向的数据,可以使用取值运算符(*):
  1. printf("%c, %d\n", *pa, *pb);
复制代码

(3)这里要注意的是取值运算符跟定义指针用的都是星号(*),这属于符号的重用,在不同的地方有不同的意义:在定义时表示定义一个指针变量;在其他位置表示获取指针变量指向的变量的值。
(4)直接通过变量名来访问变量的值,我们称之为直接访问;通过指针变量这样的形式来访问变量的值,我们称之为间接访问,所以取值运算符有时候也叫间接运算符。

三、避免访问未初始化的指针
下面的就是血淋林的例子
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int *a;
  5.     *a = 123;
  6.     return 0;
  7. }
复制代码

(1)类似于上边这样的代码是很危险的,因为指针变量 a 到底指向哪里,我们没办法知道。这个道理就跟访问未初始化的变量一样,它的值是随机的。
(2)这在指针变量里会很危险,因为后边代码对一个未知地址进行赋值,那么你可能会覆盖到系统的一些关键代码。不过你也别高兴得太早,因为系统通常都不会允许你这么干,程序这时候会被终止并报错。
(3)更危险的是,偶尔这个指针变量里随机存放的是一个合法的地址,那么接下来的赋值就会导致那个位置的值莫名其妙地被修改。这种类型的 Bug 是非常难以排查的。所以,在对指针进行间接访问时,必须确保它们已经被正确地初始化。


ps:小知识
%p表示打印地址类型的数据,如:
  1. printf("%p",pa);
复制代码
   



谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-4 00:11:47 | 显示全部楼层
谢谢小甲鱼带来的视频教程,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 00:17:45 | 显示全部楼层

刚去了北京然后到天津现在回到大连。感受了下北京的节奏还有天津的,感觉北京地铁早高峰真的很挤!要坐2个小时才到!这一天4个小时花在路上也不知道是浪费了还是怎样。。。雾霾也挺严重的,但是听住在北京的朋友说这还算好的。然后就是陪朋友加班,加到10点回家。还要洗洗睡觉,真的是一分一秒都不能耽误。要说节奏快,不如说时间被交通压缩了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 13:51:57 | 显示全部楼层
laoli7788521 发表于 2018-1-4 00:11
谢谢小甲鱼带来的视频教程,感谢!

看来小城市也有小城市的好处啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表