結構體與結構體指標
指標,陣列
巨集定義與指標函式
函式字串陣列
可變長引數函式
程式的輸出是什麼?
#include
#include
#include
#include
int main()
b =5;
longjmp
(buf,1)
;system
("pause");
return0;
}
結果:5
該setjmp
函式儲存「非本地goto
」的上下文資訊,返回0
。該longjmp
函式將控制轉移到已setjmp
初始化的呼叫buf
,並且從這一點繼續執行,就好像setjmp
返回了1
。
【注意】:之後被修改的非易失性自動變數setjmp
變得不確定longjmp
。沒有volatile
限定詞,這個程式的行為將是不確定的。這個規則允許更好的**優化。
程式的輸出是什麼?
int main()
struct node s =
; struct node *pt =
&s;printf
("%d\n",*
(int*
)pt)
;system
("pause");
return0;
}
結果:3
結構體成員按順序排列在記憶體中。指標強制型別轉換為其中某個成員的型別,即指向了結構體中的乙個成員,提領之後為該結構體成員變數的值。
程式的輸出是什麼?
int main()
; int *ptr =
(int*)(
&a +1)
;printf
("%d %d\n,
*(a+1)
,*(ptr-1)
);system
("pause");
return0;
}
結果:2 5
陣列a
為擁有5
個元素的整型,對變數名加減隱式退化為對指標的操作,a+1
訪問到了陣列下標為1
的元素。
&a
就有成為了乙個陣列指標。因此&a + 1
產生的指標越過了乙個5
個陣列元素大小的陣列,剛好跳過了a
陣列。此時對此指向的ptr
指標進行強制型別轉換,它現在的「步距」相當於乙個陣列成員,使ptr
減一指向正好回到了a
陣列的最後乙個元素。
【注意】:一般來說,不能使用非空指標的值不指向有效的物件。但是,指向陣列末尾的指標是乙個例外。這使ptr
合法的初始化,即使它不能被解除引用。
程式的輸出是什麼?
void
foo(int [
3]);
int main()
,,};
foo(a)
;printf
("%d\n"
,a[2][
1]);
system
("pause");
return0;
}void
foo(int b[
3])
結果:9
在中foo
,b有指向陣列[3]
的型別指標int
,並在增量後指向陣列a[1]()
。所以b[1]
有型別陣列[3] int
,它表示陣列a[2]()
。在值上下文中,b[1]「decay」
成乙個指向a[2][0](7)
的指標,所以b[1][1]
表示a[2][1]
,其值從8
變為9
。
程式的輸出是什麼?
int main()
結果:c=3 d=5
逗號運算子(逗號表示式)評估兩個運算元並生成第二個值。它的優先順序低於賦值。因此c = a, b
相當於c = a
,而d = (a, b)
相當於d = b
。
程式的輸出是什麼?
#include
int ripple
(int n,
...)
}va_end
(p);
return k;
}int main()
結果:5
該va_arg
巨集產生的「傳遞引數…」乙個可變引數函式的一部分。在ripple
它將被呼叫兩次,i
首先設定為5
,然後到7
。
表示式i &= i - 1
重置最右邊的1
位i
。例如,如果i
是6
(二進位制110
),i & i - 1
則是4
(二進位制100
)。內部for
迴圈執行到i0
,所以k
增加了1
位的數量i
。
5
(二進位制101
)和二進位制111
(二進位制)中有兩個1
位,所以ripple
返回5
。
程式的輸出是什麼?
void
f(char**);
int main()
;f(ar**)
;returno;
}void
f(char **p)
結果:cd
在f
,p
最初指向指標陣列中的第乙個char*
("ab"
)ar**
。新增sizeof(int)= 2
,p
使其指向第三個char*
("ef"
),之後p[-1]
表示第二個char*
("cd"
)。
temp
是什麼型別?
typedef int
(*test)
(float *
,float *);
test temp;
結果:指向函式的指標
(取兩個指標float
引數並返回int
)
該typedef
宣告為乙個型別建立乙個同義詞,然後可以用它來宣告該型別的物件。注意這個型別的新名字出現在乙個變數名的位置上,好像你正在宣告乙個變數。與#define
指令的語法相比,這可以使其看起來倒退。
程式的輸出是什麼?
void
e(int)
;int main()
void
e(int n)
}
結果:0 1 2 0
在偽**中:
e(0), e(-1) -> {}
e(1) -> -> , print 0, {}} ->
e(2) -> -> } ->
e(3) -> -> ->
程式的輸出是什麼?
int main()
;int
(*ptr)[3
]= a;
printf
("%d %d ",(
*ptr)[1
],(*ptr)[2
]);++ptr;
printf
("%d %d ",(
*ptr)[1
],(*ptr)[2
]);sysetm
("pause");
return0;
}
結果:2 3 5 6
a
有陣列[3]
的型別,陣列[2] int
,ptr
最初指向第乙個陣列[3]()
。增量後,它指向第二個陣列[3]()
。當然,*ptr
表示ptr
正好指向的陣列[3]
。
23號第十題
小兔的叔叔從外面旅遊回來給她帶來了乙個禮物,小兔高興地跑回自己的房間,拆開一看是乙個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點 0,0 走到終點 n,n 的最短路徑數是c 2n,n 現在小兔又想如果不穿越對角線 但可接觸對角線上的格點 這樣的路徑數有多少?小兔想了很長時間都沒想出來...
學習筆記 矩陣十題
快速冪模板 define n 150 struct martix inline void build inline void clear aa martix operator const martix a,const martix b returnc martix operator martix a...
尤拉計畫 第十題
the sum of the primes below 10 is 2 3 5 7 17.find the sum of all the primes below two million.低於10的素數之和為2 3 5 7 17。找出200萬以下所有素數的總和。思路這道題與第7題的線性篩思路一樣,只...