牛客C++刷题
1. 给原类型起别名:typedef int v1;
2. 用户定义的函数不可以调用的函数是main();
3. if(judge)后面可以直接什么都不跟
4. 函数的定义不可以嵌套,函数的调用可以嵌套,函数A的声明可以嵌套在另一个函数B的函数体内,但必须实现在该函数B外,且仅在函数B可见
5.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是整形,但是实际上他妈的1999年就禁止了
6.int x[6][4],(*p)[4]; p=x; 则*(p+2)指向哪里?p是指向int[4]类型的指针,p = x,指向x的首地址。p+2,即加上2个指向类型的大小,即2 * 4 = 8个int,所以*(p+2)指向x[2][0]
7.
以下程序运行后的输出结果是( )
以下程序运行后的输出结果是( )
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}
& &逻辑与运算,先执行n=b<a,得n=0,赋值表达式的返回值为赋值符号右边的值,即0,逻辑与运算结束,不执行m=a。m未被赋值,仍为0。
8. 一个算法应该具有以下5个特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。因此一个算法可以没有输入(程序的功能确定),但必须要有输出,没有输出的算法是没有意义的。注意算法与函数的区别。
9. 当基类构造函数需要外部传递参数才能进行初始化时,派生类必须显式定义构造函数,为基类传递参数;基类如果不需要传递或者可以不传递参数,派生类可以不用显式定义构造函数。10. 类的静态成员变量,为所有类对象所共有,但不属于任何一个对象
11. char s[10];s="abcdefg";出错,是因为数组名s是常量指针,代表数组的首地址,它的值不能被改变
12.if(judge)后如果不使用{}则默认只有一句在{}内,注意,是一句
13. 存在性就是变量生命周期。可见性就是能访问。内部静态类就是只有在包含该类的上下文里才能使用的类,比如在一个类内部定义的类。但它是全局存在的。
14. 下面代码的输出结果:
void main(void)
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
*(a+1)没有什么疑问,就是指a[1]=2。
*(ptr-1)是主要难点,我们要先弄清楚ptr指针代表什么?
&a+1不是首地址+1,&a是把数组看成一个整体,即偏移了整个数组a的大小(也就是5个int的大小)。所以int *ptr=(int *)(&a+1),其实ptr实际是&(a[5]),也就是a+5,注意这里的a[5]只是逻辑上的,并没有物理上的数组元素,表示指针ptr跳过数组的长度指向最后一个数字的下一个整型。
故*(ptr-1) = a[4] = 5。
15.结构体总的大小要被最大的整除,本体中long long 为8字节,所以整体大小为8的倍数。 另外,为什么不是16,因为每种类型变量的首地址要是自己类型的字节数整除,所以char后面要空着3个字节,之后才是int型变量。 所以一共24字节。
16.函数默认参数的声明
在相同的作用域内,不允许在同一个函数的多个声明中对同一个参数的默认值重复定义,值相同也不可以。如下:
int func(int x=5,int y=6){ //实现 } 正确 int func(int x=5,int y=6); int func(int x,int y){ //实现 } 正确 int func(int x=5,int y=6); int func(int x=5,int y=6){ //实现 } 错误
17
.
结果为 4,8
分析:
union中各成员共享一段内存空间,一个union的长度等于各成员中最长的长度。
所以本题中,d 的长度等于struct s的长度,为八字节(假设是32位)。
具体如图所示:
d.x,d.y以及d.s.x都是前四个字节,所以他们的值永远相等,
d.x=1;///d.x=d.y=d.s.x=1;
d.y=2;///d.x=d.y=d.s.x=2;
d.s.x=d.x*d.x;///d.x=d.y=d.s.x=2*2=4;
d.s.y=d.y*d.y;///d.x=d.y=d.s.x=4+4=8;