c和指针-学习笔记 (新知识)

(p41,,3.6节)链接属性
(p43,3.7节)变量的存储类型,有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。
静态变量(static):代码块外部声明的变量,总是存储于静态内纯中(不属于堆栈内存),在程序运行前创建,在程序整个执行过程中始终存在。
自动变量(automatic):代码块内声明的变量,存储于堆栈中,代码块内缺省情况下声明的就是自动的,在程序执行到声明自动变量的代码块,自动变量才被创建,当程序执行流离开该代码块时,自动变量自动销毁,若再次使用,其堆栈位置可能改变。
码块内声明的变量,若加上关键字static,那就从static变成auto,在程序整个执行过程中始终存在,但作用域还在代码段内部。
寄存器变量:(register)访问效率最高的可设为~,但有利有弊。
(5.1.5)sizeof判断它的操作符的类型程度,以字节为单位,sizeof(int),
sizeof(x),字符常量的长度是1个字节,数组名,返回数组的长度。
(p92,6.1节)尽管1字包含了4个字节,它仍然只有一个地址,至于它的地址是最左边的那个字节的地址还是最右边的那个字节的地址,不同的机器有不同的规定。
(6.2节)不能简单地通过检查一个值的位来判断它的类型,为了判断它的值及值的类型,必须判断程序中这个值的使用方法(整形算术指令、浮点型指令)
(6.6节)NULL指针,(6.7)再读
(6.9)指针常量
*100=25;(错误的)*只能作用于指针类型表达式
*(int*)100=25;//强制类型转化,把100从“整形”转化为“指向整形的指针”,但不常用
用处:你偶尔需要通过地址访问内存中的某个特定的位置,并不是访问某个变量,而是访问硬件本身。
(6.13)指针运算
1)算术运算:(a)指针(+/-)整数
(b)指针-指针:当两个指针都指向同一个数组中的元素时,才允许一个指针减去另一个指针,结果是一种有符号整形类型,值是两个指针在内存中的距离,以数组元素的长度为单位,对任何并非指向数组元素的指针执行算术运算都是非法的,,也就是指针已超出了数组的范围。
2)关系运算:当两个指针都指向同一个数组中的元素时,可以对两个指针值进行比较,< <= > >=
(8.1.1)int b[10],在c中,几乎所有使用数组名的表达式,数组名的值都是一个指针常量,也是数组第1个元素的地址,其类型是“指向int的常量指针”,,但数组不是指针,只有数组名在表达式中使用时,编译器才会为它产生一个指针常量(不是指针变量)。只有两种情况下,数数组名不能用指针常量来表示,sizeof(b)和&b时,前者返回整个数组的长度,后者取地址。
(8.2.4))(8.3)再看
(10.1)
struct simple
{ float a;
int a[20];
long *a;
}x,y[20],*z; //注意分号
struct complex
{ float f;
int a[20];
long *lp;
struct simple s ;
struct simple sa[10];
struct simple *sp;
}
struct comple comp;
comp.sa[4].a; //结构体里的数组元素本身也是结构体,
(10.1.5)结构体的自引用 再看
c语言循环问题:for,while,do...while使用的优劣,使用情况
左值和右值
指针常量

你可能感兴趣的:(c和指针-学习笔记 (新知识))