C和指针一些笔试中的选择题

第一次写博客,可能没有过多的幽默,只有干货,以后会慢慢改进

1.下列函数定义中,有语法错误的是()
A.void fun(int x,int *y)
{x* = *y;}
B.int *fun(int *x,int y)
{return x+=y;}
C.void fun(int *x,int y)
{*x += y;}
D.void fun(int x,int *y)
{ *x = *y;}
这道题首先要明确指针的作用以及指针的用法,指针保存一个地址,整型浮点型数据不能随意加*,因为整型这些类型的值和指针的关系是由指针解引用得到的,所以D错,x为整型不能作为地址被解引用。
答案:D

2.给出以下定义,下列哪些操作是合法的()
const char* p1 = “hello”;
char* const p2 = “world”;

A.p1++;
B.p1[2] = ‘w’;
C.p2[2] = ‘l’;
D.p2++;

这道题要明确const具体修饰指针哪个位置的作用,const char* p = char const *p;
它代表将指针指向的内容常量化,即内容不能被修改;而char *const p则代表,p当前的地址不能修改,而它的内容可以修改,所以p1不能执行赋值,p2不能执行指针移动。
答案: A
3.下面结构体
struct s1
{
char ch,*ptr;
union
{
short a,b;
unsigned int c:2,d:1;
};
struct s1 *next;
};
sizeof(struct s1)是():
A.12字节
B.16字节
C.20字节
D.24字节
结构体不同的类型写前写后是有不同的大小的,它涉及内存对齐,具体请参考C和指针还有C语言深度剖析都有讲到,而联合体Union由于所有变量共用一份空间,即取最大字节类型变量的大小即可。因为内存对齐,char ch,ptr*因为指针4个字节,则ch原本占一个字节

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值