void memread() { int *p, i; p = (int *)0xcccccccc; //指向0xcccccccc位址 while(1){ i = *p; //一直讀取0xcccccccc位址的內容 } }
設定記憶體
在某工程中,要求設定一個絕對位址為0xaaaa的整數型變數的值為0x1111。 編譯器是一個純粹的ANSI編譯器。寫程式碼去完成這一任務。 這一問題測試你是否知道為了存取一絕對位址把一個整數型強製轉型 (typecast) 為一指標是合法的。這一問題的實作模式隨著個人風格不同而不同。典型的類似程式碼如下︰
void setmem() { int *ptr; ptr = (int *)0xaaaa; *ptr = 0x1111; }一個較常用的方法是︰
void setmem()
{
*(int * const)(0xaaaa) = 0x1111;
}
定義一個最大值的巨集
#define MAX(A,B) ((A>B)?A:B)
call by value 和call by referece
void main() { int x=10,y=20; printf("x= %d,y= %d before swap(call by reference).\n",x,y); swap(&x,&y); printf("x= %d,y= %d after swap(call by reference).\n",x,y); } void swap_ref(int *px,int *py) { int temp; temp=*px; *px=*py; *py=temp; }
下列無法做swap
void main(){ int i=10, j=20; printf("i= %d, j=%d before swap(call by value).\n",i,j); swap_val(i,j); printf("i= %d, j=%d after swap(call by value).\n",i,j); printf("MAX of A and B is %d",MAX(10,100)); } >void swap_val(int i, int j) { int temp; temp=i; i=j; j=temp; }