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