1、數(shù)組與指針
假如int a[3][4];
則 a[i][j] == *(a[i]+j) == *(*(a+i)+j)
數(shù)組名就是數(shù)組內(nèi)存的首地址
1、 函數(shù)的指針
一個(gè)函數(shù)被編譯和連接后,要占用一定的內(nèi)存區(qū),它的首地址就是該函數(shù)的指針,函數(shù)的指針也是該函數(shù)的入口地址。
假設(shè)p=max()函數(shù)。p是函數(shù)指針,且max有返回值,則下列
c=max(a,b);
c=(*p)(a,b)
c=p(a,b)
都是等價(jià)的,對(duì)p不能做增減運(yùn)算
2、 內(nèi)聯(lián)函數(shù)
*不能有多分支語句和循環(huán)語句,否則作普通函數(shù)
*不能是遞歸子函數(shù)
*所含語句行數(shù)應(yīng)該為1~5行
4、帶缺省參數(shù)的函數(shù)
從友到左被定義,右邊不能含有缺省參數(shù)
5、 void Sort(int *&val) val是個(gè)int*型的引用型變量
6、Q: 帶符號(hào)數(shù)賦予不帶符號(hào)數(shù)的變量
A: short x=-35;
unsigned short y;
y=x;
x原=-35=1000 0000 0010 0011
x補(bǔ)= 1111 1111 1101 1101
將它看作不帶符號(hào)的二進(jìn)制數(shù)
所以 y=x補(bǔ)=1111 1111 1101 1101=65501
Q:無符號(hào)數(shù)賦予有符號(hào)數(shù)
unsigned short x=65530;
short y;
y=x;
A: x=65530=1111 1111 1111 1010
y補(bǔ)=x;
所以y原=1000 0000 0000 0110
所以y= -000 0000 0000 0110=-6
7、int a=b=6;是不允許的,但是int a,b=a=6;卻是可以的。
8、++與+等的優(yōu)先級(jí)
優(yōu)先級(jí) 高——> 低
+,-,++,-- *,/,% +,- <<,>>
__同級(jí)_ __同級(jí)_ __同級(jí)_ __同級(jí)_
Q: -a++ 由于++,-同級(jí),所欲按結(jié)合性從右向左,故等價(jià)于 –(a++)
-++a EQU -(++a)
但是 ++(-a)是個(gè)錯(cuò)誤的表達(dá)式,因?yàn)?/span>-a不是變量,而是表達(dá)式,不能對(duì)表達(dá)式進(jìn)行自增。(-a)++同理也是錯(cuò)誤的。
a+++b 未定義。不該使用。
a+--b EQU a+(--b)
9、Q:指向不同類型指針
int *p;
float f;
p=&f; //ERROR,p指向的類型是int,類型不匹配
10、假設(shè)p=&a則
*p EQU *(&a) EQU *&a EQU a
&a EQU &(*a) EQU &*p EQU p
11、 y=*p++ 等價(jià)于 y=*(p++) 注: y的值等于*p的值,p的新值等于(p原值+1) X 相應(yīng)數(shù)據(jù)類型長度。
y=*++p 等價(jià)于 y=*(++p) 注: y的值為(p+1)X數(shù)據(jù)類型長度。
y=(*p)++ y值等于*p,*p的值為*p + 1
y=++(*p) y的值等于(*p)+1 *p新值等于 (*p)+1
12、%取余運(yùn)算。
(-3)%2 EQU -(3%2)=-1
5%-1 EQU 5%3=2
19%10%5 EQU (19%10)%5=4