牛客C/C++刷题笔记(二)
迪丽瓦拉
2025-06-01 02:54:56
0

30、有以下程序

int main() {char a = 'a',b; printf("%c,", ++a); printf("%c\n", b = a++);return 0;
}

程序运行后的输出结果是()
在这里插入图片描述

第一个是a先加所以是b,第二个a前面已经自加了是b,所以是b=b,后面的++是输出后再加的。
a++返回的是当前a的副本,并对a的引用 +1。即下次调用直接就是+1后的值

31、静态外部变量只在本文件内可用。请问这句话的说法是正确的吗?
在这里插入图片描述

在外部变量的定义前面加上关键字static,就表示定义了一个外部静态变量。外部静态变量具有全局的作用域和全局的生存期,定义成static类型的外部变量将无法再使用extern将其作用范围扩展到其他文件中,而是被限制在了本身所在的文件内,为程序的模块化、通用性提供方便。

32、若有以下定义和语句:

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = a;

则不能表示a数组元素的表达式是
在这里插入图片描述

A的值为1 B越界 C和A相同 D p-a地址相减为0,访问数组第一个元素

33、有定义“int x=12,y=15,z;”,则执行表达式“z=(x||(y-=x)”后,变量y和变量z的值分别为:
在这里插入图片描述

只对决定整个表达式值所需的最少数目的子表达式进行运算,那么对于或运算而言,如果左边表达式值为0,那么整个逻辑运算结果就是0,不会对右侧表达式进行运算了。此题中zII(y-=x),z的值是15,整个或表达式的值就是1,赋值给z后,z的值为1,而y的值始终没有变还是15.

34、下列说明中 const char *ptr;ptr应该是()
在这里插入图片描述

如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

35、创建一个类的对象时,系统自动调用()
在这里插入图片描述

在生成一个类的对象时,会自动调用其构造函数,在销毁一个类的对象时,会自动调用其析构函数

36、对结构体类型的变量的成员的访问,无论数据类型如何都可使用的运算符是( )

在这里插入图片描述
37、下⾯函数的功能是()

int fun (char *s) {char *p = s;while(*p++);return p-s-1;
}

在这里插入图片描述

传递进去一个char类型的指针 使用一个char类型的指针p接受
while(p++)
p==‘\0’的时候while循环停止
两个指针相减得到它们元素的个数
而使用‘\0’减去起始位置之后实际上还多了1
所以要减去1
原代码等价于:

int fun (char *s) {char *p = s;while(*p) //p所指字符ASCII码不为0,即不是结束符'\0'p++;//p指向下一个字符p++;return p-s-1;//s指向首字符,p指向结束符'\0'的下一个字符,则p-s-1为字符串长度
}

38、虚函数可不可以重载为内联?
在这里插入图片描述

39、下面的程序执行后,文件test.txt中的内容是()

#include 
#include 
void fun (char *fname,char *st) {FILE *myf;int i;myf = fopen(fname,"w");for (i = 0; i < strlen(st); i++) fputc(st[i], myf);fclose(myf);
}int main() {fun("test.txt","new world");fun("test.txt","hello,");return 0;
}

在这里插入图片描述

函数fun的功能就是将第二个参数字符串写入到文件test.txt中,但因为打开文件test.txt的方式是以只写方式,所以每次调用函数fun后都会将原来文件内容清除(如果test.txt文件存在),这样一来test.txt中的内容将是最后一次调用fun函数写入的字符串。故选择答案是A。
在这里插入图片描述

40、假如整型指针p已经指向某个整型变量x,则(*p)++和下面哪一个等价?
在这里插入图片描述
41、以下所列的C语言常量中,错误的是( )
在这里插入图片描述

D: ‘\72’代表合法的一个字符常量,\为转义字符,代表八进制,ascii码为8*7 + 2= 58;58这个ASCII,即’:'这个字符
C: 表示这个2在内存中占用一个long型长度的空间
B: 1.2e0.5 e后面要求是整数

int main() {int a=5,b=0,c=0; if (a=b+c) printf ("***\n"); else  printf("$$$\n"); return 0;
} 

在这里插入图片描述

if后面的表达式可以是任何类型的表达式,当然可以是赋值表达式,所以答案A和B是错误的,因赋值表达式的值为0(即为假),所以执行else后的语句,输出$$$。
故正确答案是D。

int a=3;
int main ()
{int s=0;{int a = 5;s += a++;}s += a++;printf ("%d\n", s);
}

在这里插入图片描述

54.X定义如下,若存在则a.y[1]的值可能为()

X a;
a.x = 0x11223344;  union X{int x;char y[4];
};

在这里插入图片描述

小端存储:和常用习惯一样——低地址存低位
大端存储:高地址存低位
大小端存储要以系统而定,小端的话应该是33

55.已知有职工情况结构变量emp定义为:

struct Date {int year;int month;int day;
};
struct Employee {char name[20];long  code;Date birth
}; Employee emp;

下列对emp的birth正确赋值方法是()
在这里插入图片描述
56.执行下列语句后,y的值是()

int x, y;
x=y=1;
++x || ++y;

在这里插入图片描述

++x || ++y; ||是或操作符,a||b只要a为真,就不执行b了,如果a为假,则需要判断b的内容。

57.下面代码的执行结果是()

#include 
int main(void) {char *p[] = {"TENCENT", "CAMPUS", "RECRUITING"};char **pp[] = {p + 2, p + 1, p};char ***ppp = pp;printf("%s ", **++ppp);printf("%s", *++*++ppp);return 0;
}

在这里插入图片描述

这里是引用

58.下列关于C源程序的叙述错误的是()

在这里插入图片描述

这里是引用

59.关于以下代码,哪个说法是正确的?

myClass::foo(){delete this;
}
..
void func(){myClass *a = new myClass();a->foo();
}

在这里插入图片描述

这里是引用

相关内容