1:变量声明
int a;
这句声明会确定两个东西,内存大小,内存的分析方式。
内存大小:比如int一般占四个字节;
内存的分析方式:声明变量为 int
类型,意味着在对这段内存进行读取和写入操作时,会按照整数的方式来解析和处理这段内存。如果是float类型,就按照float的方式。计算机内部在处理这些不同类型数据时,是有各种不同的规则的。
2:指针大小
指针变量的大小一定是系统位数这么大。
64位系统,指针就有64位,也就是8字节大小。32位系统,就是4字节大小。
因为指针就是地址,内存地址是多少位,指针就是多少位。
3:空指针
int *p;
声明了一个指针出来,那么总是的用它的,如果整个程序中都没写让它指向某个地址,
那么这个指针就是野指针。
int *a = NULL;
在声明时把NULL赋值给它,这个指针就是个空指针。
没有掌握指针的状态是一件很危险的事,使用指针时,野指针不一定会报错
但空指针会,这样就可以掌握指针的动向。
4:c语言的基本组成单位是函数。这句话基本正确。
5:运算符的结合性
-
从左到右的结合性:如果一个运算符是从左到右结合的,那么同级别的运算符将从左边开始依次计算。大多数运算符,比如加法(
+
)、减法(-
)、乘法(*
)和除法(/
),都是从左到右结合的。例如,在表达式a + b + c
中,首先计算a + b
,然后将结果与c
相加。 -
从右到左的结合性:如果一个运算符是从右到左结合的,那么同级别的运算符将从右边开始依次计算。赋值运算符(
=
)和大多数单目运算符(如递增++
、递减--
、逻辑非!
等)是从右到左结合的。例如,在表达式a = b = c
中,首先计算b = c
,然后将这个结果赋给a
。
x=(i=4,j=16,k=32);
查优先级表,逗号是从左往右,所以括号中的值最终为32。
int a = (1,2,3);
printf("%d\n", a);
会选取最后一个值,所以会输出3。
6:浮点数,.的前面或者后面什么也不写是合法的。
float a = .123;
float b = 123.;
//输出:
//123.000000
//0.123000
2e3这样的指数,e后面只能是整数,e前面也不能不写值。
7:const
const关键字,防卧龙凤雏神器。要清楚哪些量可改,哪些量不可改,比如函数的指针型参数,
很多时候就这样限制通过指针改数据。
8:int c = +001;
int c = +001;
这样是允许的。
9:%p
%p是输出地址的值,如果以%d去输出&a的话,有可能会导致错误。