问题总结:2022.10.8
1.关于进制问题:
一串数字,如果以H结尾或者0X开头,为16进制数字;
一串数字,如果以O结尾,为8进制数字;
2.关于数组和链表的对比优劣:
链表特性:由于不使用下标进行索引,可以通过相邻节点的操作来增加元素和删除元素(数据结构会学到),增加元素和删除元素较易;
数组特性:通过下标索引,所以查询和修改会比较方便;
通常情况下通过不同需求使用不同的数据结构;
3.链表堆区节点衍生出的内存四区的问题:
有同学写了c语言的官网题目,关于malloc提出了疑问,malloc函数是c语言用户手动在堆区开辟一段定长的内存。
首先介绍一下内存四区中的栈区和堆区,每个变量都会在计算机中存在地址
栈区:在函数中初始化的变量的地址放置在栈区,但栈区空间较小
堆区:c语言可以使用malloc函数对变量在堆区开辟空间,c++语言可以使用new函数在堆区开辟空间。
但是由于c和c++并没有垃圾回收机制(区别于Java可以由系统自动释放无用内存(GC垃圾回收机制))。
当不需要该变量(对象)需要使用free函数(c语言释放内存函数)和dalete函数(c++释放内存函数)将malloc函数和new函数开辟空间的变量内存释放掉
4.Visual Studio报错之"scanf_s"问题:
由于vs的安全机制等特性,不允许使用scanf,但是后续版本中推出了scanf_s类型的安全输入函数(放心使用)
5.Visual Studio报错之"无法解析的外部命令"问题:
该文件下:
(1)无main函数;
(2)函数只声明却没定义函数体;
(3)文件创建错误(创建时并不是c++源文件);
其他文件的问题:
(1)在其他项目中也存在main函数;
6.关于前置++和后置++的问题
w++和++w的效率问题:++w的效率大于w++
前置++:
对于表达式的顺序,首先执行++操作之后再进行表达式操作,所以(1)操作等价于(2)和(3)操作,b=12
a=1;
b=(++a)+(++a)+(++a);//(1)
//b=12
++a,++a,++a;//(2)
b=a+a+a;//(3)
后置++:
对于表达式的顺序,首先进行表达式操作之后再执行++操作,所以(4)操作等价于(5)和(6)操作,b=3
a=1
b=(a++)+(a++)+(a++);//(4)
//b=3
b=a+a+a;//(5)
a++,a++,a++;//(6)