1、数组与指针
假如int a[3][4];
则 a[i][j] == *(a[i]+j) == *(*(a+i)+j)
数组名就是数组内存的首地址
1、 函数的指针
一个函数被编译和连接后,要占用一定的内存区,它的首地址就是该函数的指针,函数的指针也是该函数的入口地址。
假设p=max()函数。p是函数指针,且max有返回值,则下列
c=max(a,b);
c=(*p)(a,b)
c=p(a,b)
都是等价的,对p不能做增减运算
2、 内联函数
*不能有多分支语句和循环语句,否则作普通函数
*不能是递归子函数
*所含语句行数应该为1~5行
4、带缺省参数的函数
从友到左被定义,右边不能含有缺省参数
5、 void Sort(int *&val) val是个int*型的引用型变量
6、Q: 带符号数赋予不带符号数的变量
A: short x=-35;
unsigned short y;
y=x;
x原=-35=1000 0000 0010 0011
x补= 1111 1111 1101 1101
将它看作不带符号的二进制数
所以 y=x补=1111 1111 1101 1101=65501
Q:无符号数赋予有符号数
unsigned short x=65530;
short y;
y=x;
A: x=65530=1111 1111 1111 1010
y补=x;
所以y原=1000 0000 0000 0110
所以y= -000 0000 0000 0110=-6
7、int a=b=6;是不允许的,但是int a,b=a=6;却是可以的。
8、++与+等的优先级
优先级 高——> 低
+,-,++,-- *,/,% +,- <<,>>
__同级_ __同级_ __同级_ __同级_
Q: -a++ 由于++,-同级,所欲按结合性从右向左,故等价于 –(a++)
-++a EQU -(++a)
但是 ++(-a)是个错误的表达式,因为-a不是变量,而是表达式,不能对表达式进行自增。(-a)++同理也是错误的。
a+++b 未定义。不该使用。
a+--b EQU a+(--b)
9、Q:指向不同类型指针
int *p;
float f;
p=&f; //ERROR,p指向的类型是int,类型不匹配
10、假设p=&a则
*p EQU *(&a) EQU *&a EQU a
&a EQU &(*a) EQU &*p EQU p
11、 y=*p++ 等价于 y=*(p++) 注: y的值等于*p的值,p的新值等于(p原值+1) X 相应数据类型长度。
y=*++p 等价于 y=*(++p) 注: y的值为(p+1)X数据类型长度。
y=(*p)++ y值等于*p,*p的值为*p + 1
y=++(*p) y的值等于(*p)+1 *p新值等于 (*p)+1
12、%取余运算。
(-3)%2 EQU -(3%2)=-1
5%-1 EQU 5%3=2
19%10%5 EQU (19%10)%5=4