刚刚看了篇博文: 北大硕士开米粉店,3个月后的最大收获与感悟是
里面的一些词,让我很触动,很有共鸣感,
“书生式的无病呻吟”:确实,好像有很多时候觉得自己已经很苦逼了,可是看看那些在社会上用自己的双手为生计打拼的人,拿着国家津贴,父母的钱,却连最基本的学习都觉得苦,真是羞得无地自容啊!
“理解和尊重”。。。不说废话了,下面记叙C语言的指针,一来知道指针是C语言的灵魂,二来,近来学习数据结构和算法,里面有很多指针的操作,理解还是有点困难呀!
1.计算机的内存由位(bit)组成,每个位可以容纳值0和1.
即:计算机内存的最小单位就是:位(bit)
2.现实计算机的内存以字节(byte)为单位(bit太小啦!),每个字节8位,存储无符号值:0~255,或有符号值:-128~127
3.指针的声明:int *p = &a (要死这都快忘了,p的值是a的地址,*p是a的值,其实可以拆成两句:int *p;(声明一个指针变量)p = &a;(指针变量赋值))
4.变量的值就是分配给该变量内存位置所存储的数值。(爱死这句话 )
5.指针一定要初始化,即给定它所指向的位置。一般初始化:int *p;p = NULL(表示特定指针P目前并未指向任何东西。)(当不确定指针指向何地址,
如果地址确定,则将p直接赋值为该地址)
6.p = 10 -*p 是非法的,因为它将一个整形数量(10-*p)存储与一个指针变量中。
7.假定a存储于位置100,则*100 = 25;
注意!注意!注意!(时至今日才明白这点)
这个表达式是非法!理由:指针操作是间接访问的方式,而间接访问操作只能作用于指针类型表达式,而字面值100的类型是整型。!不是指针类型!
如果你想把25存储与位置100,则必须使用强制类型转换。
*(int *)100 = 25(这种方法基本不用,也不建议使用)
8.指针的指针(其实指针啊指针啊,也就是指针变量,归根结底就是个变量,先声明,在定义。
没有什么太大的不同,只是指针变量的存放的是其他数据的地址值而已,也就是隐性的存在一种指向关系,间接访问)
指针的指针,一层层的剥,首先它是一个指针,其次复杂的,它指向的也是一个指针啦!
哎呀妈呀,想画张图,结果又一次发现自己是弱爆了!
还是先上干巴巴的代码先:
int a = 12; int *b = &a; int **c = &b; #*操作符具有自右向左的结合性
代表的意义:
表达式 | 相当的表达式 |
a | 12 |
b | &a |
*b | a,12 |
c | &b |
*c | b,&a |
**c | *b,a,12 |
9.&a不能作为左值。优先级表格显示&操作符的结果是个右值,它不能当作左值使用。
理由:当表达式&a进行求值时,它的结果应该存储于计算机的位置是未知的。这个表达式并未表示任何机器内存的特定位置,因此无法对其进行赋值。
暂且记下这么多,指针博大精深。。有待更加深究。。