筆試小題

struct s1
{
char *ptr,ch;
union
{
short a,b;
unsigned int c;
};
struct s1 *next;
};
s1這個結構體大小爲4字節 + 4字節 + 4字節 + 4字節 = 16字節(4字節對齊)
struct s2
{
char a;
struct s1 b;
short c;
};

s2這個結構體大小爲 4字節 + 16字節 + 4字節 = 24字節(對齊到4字節)

(a)char (*x[10])(int):

typedef char (*PF) (int);

PF x[10];

描述的含義是:指針數組,擁有10個函數指針元素,這些函數指針每一個都指向參數爲int類型,返回值爲char類型的函數

 (b)void (*x(int,void(*y)(int)))(int)

typdef void(*PF)(int);

PF x(int ,PF y);

描述的含義是:x是一個函數,返回值類型爲一個函數指針,指針返回值爲void類型,參數爲int類型的函數,x函數的參數類型爲int和函數指針,該函數指針指向的函數返回值爲void,參數爲int類型的

(c)char *p = "Hello world"和char p[] = "Hello world"差別在哪兒?

char *p :p獲得了常量字符串的首地址(淺拷貝)

char p[]:以p爲起點的地址,拷貝了常量字符串的整個內容(深拷貝)

(d)void func(int *a[10])和void func(int **a)等價嗎?

不等價,對第一個和第二個來說,a + 1都是向後跳過4個字節,但是對第一個來說,&a + 1 向後跳過4 * 10 個字節,如果二維數組作爲函數參數傳人時,必須用第一個,第二個是不行的。

(e)void func(int a[10][10])和void func(int *a[10])等價嗎?

這兩個是等價的,對於它們兩個, a + 1 都是向後跳過4 * 10 個字節


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章