第一次写博客,可能没有过多的幽默,只有干货,以后会慢慢改进
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原本占一个字节