您的位置:首页 > 编程语言 > C语言/C++

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 这样的头文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: