C++ 易混淆知识总结
2017-11-16 10:12
260 查看
1. int main (int argc, char **argv) 或者 int main (int argc, char *argv[])
char *argv[] 是一个指针数组参考:
https://www.cnblogs.com/andrew-wang/archive/2012/11/06/2756823.html
关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试:
http://blog.csdn.net/lyj_viviani/article/details/51873961
int main(int argc, char* argv[])用法解析: http://blog.csdn.net/justinshane/article/details/51897254
2. int和 int *类型的区别
根据不同类型,会分配不同长度的内存单元的。int a 定义的是4个字节的空间,将会分配32位用于存储;int*a 是指针变量,指针也是变量,所有的变量都会有一个地址来保存他的值,指针的大小根据不同的系统不一样,但是都是占一个int型,如果是32位,就是4个字节,16位就是2个字节,正是因为指针有了地址来保存,所以就有指向指针的指针。同样,每个函数其实也是有一个地址来保存,用来说明这个函数在内存的地址,当要调用这个函数时,只要知道这个地址,就可以找到这个函数,也就有了指向函数的指针。
int *a; int b;
a这个变量中 存储的是一个地址m,这个地址是个整数;b这个变量中 存储的是一个整数n。
这个整数n有没有可能和那个地址m相等?—>内存地址根据你的内存大小是有一个范围的,而你的N是变量,是可以相等的。
3. 引用作为函数的返回值
示例:int fun() VS int& fun()int set(){return a;} //此时生成的是变量a的一个拷贝,即生成了一个临时变量,当这个变量使用完毕之后,变量就被销毁了,所以这种返回不能用作左值运算,如:set() = 5;这是不正确的。
int& set(){return a;} //在第二个例子中,返回的是引用,那么,就相当于返回的是变量a的别名,就可以对该变量操作,如赋值等等。set() = 5;是正确的。
//但是在引用返回时得注意一个问题,就是不能返回局部变量的引用,如: int& set(){ int a; return a; } //此时就会调用出错,因为a是临时变量,函数结束是就自动销毁了,不能再创建别名了。但是将int& 改成int就可以了。
参考:https://zhidao.baidu.com/question/250274499.html
4. vector <int>和 vector <int *星>
vector<int> 容器中放的是int类型的对象;vector<int*> 容器中放的是指向int类型的指针
这里的vector可以换成其他的容器,比如map、list等
参考:http://blog.csdn.net/wujunokay/article/details/12380341
5. #include <string.h> 、 <cstring>、 <string> 的区别
#include <string.h>string.h 是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。
#include <cstring>
在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个”c”前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是 cstring 的来源,不要觉得又多了一个东西。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”。
#include <string>
string 是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但 string 又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在 string 的文件中除了定义自己的string类之外,还加了一个#include string.h 一句包含了C版本的字符串操作。
没有 cstring.h 这样的头文件。
相关文章推荐
- C++基础知识易错点和易混淆总结汇总(不定时更新)
- C++知识总结(5)
- C++知识总结(9)
- 【C#小知识】C#中一些易混淆概念总结(八)---------解析接口
- C++及变量基本类型知识总结
- c++知识总结(6)
- C/C++基础知识总结——C++简单程序设计
- C++知识总结(21)
- C++面试总结 笔试基础知识常考点
- C++基础知识复习&总结
- [C++]C++面试知识总结
- perl的基础知识总结-----易混淆但有用特殊符号
- 【c++】模板知识总结
- C++基础知识总结--指针
- C++基础知识 sizeof运算符应用的总结
- C++基本知识总结
- 【C++】第1-2章 C++基础 知识总结
- [C++ 面试基础知识总结]表达式和函数
- C++基础知识总结(一)
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法