{
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 個字節