目录
1、以下程序的输出结果是 ( )
- #include
- int main()
- {
- char a[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 0 }, * p;
- int i;
- i = 8;
- p = a + i;
- printf("%s\n", p - 3);
- return 0;
- }
正确答案:
解析:
- %s:格式化打印是遇见 '\0'(0) 才会停止打印。
----------------------------------------------
2、以下程序的输出结果是 ( )
- #include
- using namespace std;
- int main()
- {
- int x = 3, y = 3;
- switch (x % 2)
- {
- case 1:
- switch (y)
- {
- case 0:
- cout << "first";
- case 1:
- cout << "second";
- break;
- default:
- cout << "hello";
- }
- case 2:
- cout << "third";
- }
- return 0;
- }
正确答案:
解析:
根据x % 2 = 1匹配 case 1: ,根据y = 3匹配 default: ,于是会打印 "hello" 。但是此处我们需要注意,外层的switch语句的case : 是没有 break; 语句的,所以其会继续向下执行,然后执行case 2: ,再打印 "third" 。
没有 break; 语句会一直执行到 break; 语句为止 / 结束。
----------------------------------------------
正确答案:
解析:
:二维数组再声明的时候,行可以省略,列是不可以省略的。
:声明的是两行,但是初始化的时候,初始化的是三行。
:初始化每一行的时候,必须连续的初始化,中间不能间隔。
----------------------------------------------
正确答案:
解析:
return 每一次只能 return 一个数据类型,多个除非放到一个数组 / 一个容器里面。
用数组的话,在调用这个函数的时候需要传递数组的地址,然后将函数处理的结果,放到这个数组中,然后函数调用完之后,就可以通过主调函数去访问数组来获取处理结果。
用指针的话,在调用这个函数的时候需要传递两个地址变量,然后将对应的处理结果,放到地址的所属空间中,然后在函数调用完之后,主调函数通过两个指针去访问所属空间的值。
全局变量的作用域是在整个源文件都是有效的,所以主调函数可以对其访问,以获取处理结果。
----------------------------------------------
正确答案:
解析:
- 题int *p[4]:[]的优先级是高于*的,所以p先和[]进行结合表示其是一个数组,然后数组里面存储的是int类型的指针 —— int类型的指针数组,元素个数为4
int p[4]:int类型的数组,元素个数为4
int *p:int类型的指针数组
int *(p[4]):此时[]的优先级是高于*的,int类型的指针数组,元素个数为4
int (*p)[4]:此时*的优先级是高于[]的,数组指针,元素个数为4,int类型
----------------------------------------------
正确答案:
解析:
while(ch=getchar()!='\n'):先getchar()获取一个字符,然后由于 != 优先级高于 '\n' ,所以,先进行 getchar()!='\n' 后再执行 ch = (getchar()!='\n'),虽然ch存在很奇怪,但是能计算。
操作符优先级(详细说明+表格+问题表达式)_川入的博客-CSDN博客
while(getchar()!='\n'):
的简易版,能实现。
for(n=0; getchar()!='\n'; n++):getchar()!='\n' 作为判断条件,此可以理解为与
效果一样,能实现。
for(ch=getchar(); ch!='\n'; n++):ch=getchar() 作为初始化部分,只有最开始的时候才会执行一次,所以是无法实现的,并且如果输入的第一个字符不是 '\n' 将会死循环。
----------------------------------------------
- char* ptr;
- char myString[] = "abcdefg";
- ptr = myString;
- ptr += 5;
正确答案:
解析:
因为p指向的类型是char类型的。
----------------------------------------------
- int b;
- (1)const int* a = &b;
- (2)int const* a = &b;
- (3)int* const a = &b;
正确答案:
解析:
- 常量指针:指针所指空间的值是不能发生改变的,不能通过指针解引用修改指针所指向的空间的值,但是指针的指向是可以发生改变的。
- 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值是可以发生的,可以通过指针解引用改变指针所指空间的值。
- 区分:const与*的相对位置
- const在*的左边 -- 常量指针
- const在*的右边 -- 指针常量
(1)常量指针
(2)常量指针
(3)指针常量
----------------------------------------------
正确答案:
解析:
三行四列的一个数组,一共有 3 * 4 = 12 个元素。每一个元素都是int的二位指针类型,指针类型在32位系统中,是4个字节,于是:12 * 4 = 48。
----------------------------------------------
- #include
- int main() {
- long long a = 1, b = 2, c = 3;
- printf("%d %d %d\n", a, b, c);
- return 0;
- }
正确答案:
、
解析:
- 大端:低位存高地址,高位存低地址。
- 小段:高位存高地址,低位存低地址。
看题:
long long类型是占8个字节,32 位 little endian 的机器。
利用printf函数打印这三个变量的值,printf是一个库函数,在调用的时候,会创建一个函数栈帧。(栈:高地址向低地址增长)
调用printf函数的时候,变量是从右到左入栈的(先c,再b,再a)。
然后利用 %d 进行打印,每次获取4个字节内存的数据,然后根据后进先出的原则,依次向后4个字节,以转化为十进制打印。
所以输出为:1 0 2
----------------------------------------------
- #include
- #include
- using namespace std;
-
- int main() {
- string str;
- cin >> str;
- string str_ret;
- string str_tmp;
- for(auto ch : str)
- {
- if(ch <= '9' && ch >= '0')
- str_tmp.push_back(ch);
- else
- {
- if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
- str_tmp.clear();
- }
- }
- if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
- cout << str_ret << endl;
- }
- class Solution {
- public:
- int MoreThanHalfNum_Solution(vector<int> numbers) {
- if(numbers.empty()) return 0;
- sort(numbers.begin(), numbers.end());
- return numbers[numbers.size() / 2];
- }
- };
- class Solution {
- public:
- int MoreThanHalfNum_Solution(vector<int> numbers) {
- int result = numbers[0];
- int times = 1;
- int i = 1;
- for (int i = 1; i < numbers.size(); ++i)
- {
- if (times != 0)
- {
- if (numbers[i] == result) // 相同记录个数
- ++times;
- else // 不同消
- --times;
- }
- else // 前面的数全部消完,需要重新挨着再拿出一个数做标准
- {
- result = numbers[i];
- times = 1;
- }
- }
- return result;
- }
- };
/