笔试小题

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值