笔试题1
来源:互联网 发布:js跳转页面 开新窗口 编辑:程序博客网 时间:2024/06/06 14:11
1.写输出结果
char X[] = "AB";
char Y[] = { 'A','B'};
cout << sizeof(X) << "|" << sizeof(Y) << endl;
cout << strlen(X) << "|" << strlen(Y) << endl;
随机
2.找错误
.
结果:
GetMemory()函数返回一个指向栈区开辟的"指针",在函数结束前,p会讲其拷贝一份给无名临时对象,作为函数的返回值,系统释放,而此时的hello world 在栈区开辟的在函数结束之时就会被释放,在主函数中打印相当于p指向了一个已经被释放的空间,所以会出现乱码。
修改:此时的hello wrold 在字符串常量区,程序没有结束,该区的资源就不会被释放。
这是一个前辈写的,非常详细
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456/0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"
优化成一个地方。
}
cons t int a 还在栈区开辟,const只是说明局部变量具有常性而已,不能被修改,
字符串常量也具有常性,而他在字符常量区。
3.分析题
数组和指针有时候可以相互操作,但是数组名不能作为左值,(必须是可修改的左值,唯一的地址,单地址里面 的东西可以改变) ++arr 错误,虽然不会产生临时空间,但是arr空间里的值具有常性,所以不能作为左值, arr++同理不能作为左值,还有一点他会产生临时空间,先保存arr的值,要正确输出的话还会产生新的空间,即数组名不能作为左值,进行自增运算符,指针可以自增自减
左值与右值:更深一层,可以将 L-value 的 L, 理解成 Location,表示定位,地址。将 R-value 的 R 理解成 Read,表示读取数据。现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。
变量名编译之后,会映射成内存地址
区别i++,和++I 其中i++不能作为左值,是因为产生临时空间,++I 可以作为左值,不会产生空间,并且空间里的值是可以修改的,不具备常性,故++i可以作为左值。
4.分析题
运算符优先级:后置++ -- 有限级最高,下来[] () . -> ,然后前置++-- , 再* & , +-*/ 位移
基本的优先级需要记住:
指针最优,单目运算优于双目运算。如正负号。
先乘除(模),后加减。
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
逻辑运算最后计算。
移位运算例如: 3 << 2,则是将数字3左移2位
计算过程:
3 << 2
首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。
其中数组名arr +1 相当于指向数组的第二个单元,
printf("%s\n", *--*++cpp + 3);//ER ,此时cpp已经指向cp数组第二 c+2 ,*(c+2)取值,++cpp, cp指向c的第二个元素 再—指向第一个元素,*一下,就是c数组第一个元素。第一个元素是char*指针,指向首元素,最后+3就是右移3位,%s输出,就是ER.
- 思科笔试题1
- 笔试题1
- 思科笔试题1
- 笔试题1
- 数据结构笔试题1
- 笔试题整理(1)
- java笔试题1
- JAVA笔试题1
- 笔试题收集-1
- C++笔试题(1)
- c++笔试题1
- java笔试题1
- 腾讯笔试题1
- 笔试题(1)
- 笔试题(1)
- 笔试题整理1
- 笔试题1
- c++笔试题(1)
- 在studio中使用libsdl2.so,编译SDL Demo
- PAT_乙级1003
- 顺序表插入数据方式之头插
- java异常
- 从拉普拉斯矩阵说到谱聚类
- 笔试题1
- 人才的评价标准
- 【剑指offer】面试题23:链表中环的入口节点
- 辗转相除(求最大公约数及最小公倍数)
- Project Remind-You(持续更新中......)
- Remind-You Part1. 多进程控制
- 编程的意义何在?
- Remind-You Part2. setup.py打包代码, socket通讯
- Remind-You Part3. Python-Sqlite记录数据