{
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 个字节