C++学习
yangyong0717
这个作者很懒,什么都没留下…
展开
-
C++中的引用与指针的区别
指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化。 ★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;转载 2017-06-04 20:51:44 · 352 阅读 · 0 评论 -
C++ 直接cout指针名的含义?
首先看下面这个代码实例:#include using namespace std;int main(){ char *str = "this is a test"; cout << "str=" << str << endl; cout << "*str=" << *str << endl; cout << "&str" << &str << endl; system("pa原创 2017-10-08 10:48:18 · 1512 阅读 · 0 评论 -
C++堆和栈的区别和联系
C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉,资源将由操作系统在程序结束后自动回收。自由存储区:是由原创 2017-09-16 10:39:33 · 19801 阅读 · 5 评论 -
关于各类复杂的数组声明,指针数组,数组指针等的理解
数组相当于一个容器,能够存放大多数类型的对象,例如可以存放指针。又因为数组本身就是对象,所以允许定义数组的指针以及数组的引用。对于定义指针的数组比较简单和直接,但是定义数组的指针和数组的引用相对比较复杂一些。下面列举一些简单的声明:int *ptrs[10]; //ptrs是含有10个整型指针的数组int &refs[10]原创 2017-06-24 20:46:10 · 612 阅读 · 0 评论 -
C++11新标准constexpr关键字
constexpr是C++11新标准规定的规定的关键字。有时我们很难分辨一个初始值是不是常量表达式,当然可以定义一个 const变量并把它的初始值设为我们认为的某个常量表达式,但在实际使用时,尽管要求如此却常常发现初始值并非常量 表达式的情况。可以说,这时的对象的定义与使用根本就是两回事。C++11新标准规定,允许将变量声明为constexpr类型让编译器来验证变量的值是否是一个常量表转载 2017-06-24 19:51:42 · 2595 阅读 · 0 评论 -
c++中的箭头运算符的含义
c++中箭头运算符->,相当于把解引用和成员访问符两个操作符结合在一起,换句话说,p->func()和(*p).func()所表示的意思一样。例如:class A{public:func();}class B{ A *p = new A();*p.a(); //或者使用p->a,二者等价,且更加简洁}总结就是,->的功能就是提供了一种对象指针更方便的访问对象成原创 2017-06-24 19:16:54 · 15295 阅读 · 0 评论 -
C++begin和end运算符的返回迭代器的类型如何判断
begin和end返回的具体类型应该由对象是否是常量进行确定,如果对象是常量,则这两个函数返回const_iterator;如果对象不是常量,则这个函数返回iterator类型。下面利用一个超级简单的小程序进行验证二者的类型,源代码如下:#include #include using namespace std; int main() { vector ivec;原创 2017-06-24 17:53:24 · 2638 阅读 · 0 评论 -
#include和using的区别
原博客地址为:http://blog.csdn.net/cyfcsd/article/details/51174394这是一个C++里的老问题了,就像sizeof与strlen一样,困扰着很多初级程序员,所以估计看这篇文章的读者大都也是刚入门C++不久的新手,所以就不谈那些大道理了,而且那些文章已经不少了。本文将从一个个程序试验入手,让大家对问题有个比较充分感性认识。也希望大家不要转载 2017-06-24 10:14:03 · 2178 阅读 · 0 评论 -
C++顶层const和底层const的区别
顶层const和底层的const主要是针对指针来说的。所谓顶层const是指指针的不变性,即指针指向的位置不变!int *const p = &i; 则p这个值不会再变,在这里你可以通过其他方式改变i这个值,比如说你可以直接赋值i = 9;。这样const也拿你没办法。而底层const则是指指针指向的对象或者内置类型不变,const int *p = &i;则这里的i的值就不许再变原创 2017-06-23 19:59:46 · 976 阅读 · 1 评论 -
C++的顶层const和底层const的理解
来自博文http://blog.csdn.net/qq_19528953/article/details/50922303最近,又一次翻开C++primer,决定仔细研究一下自己以前没搞懂的顶层const和底层const,这次看了后感觉明白了,所以记录下来,以后可以没事翻阅,增加记忆。首先,const是一个限定符,被它修饰的变量的值不能改变。对于一般的变量来说,其实没有顶层const和底层转载 2017-06-23 19:03:40 · 416 阅读 · 0 评论 -
C++中关于int *p和 int* p的区别?
根据C++Primer介绍:对于int* p(这种写法合法,但是容易造成误导),其基本数据类型是int,后面的*其实是声明符。在一组公用的数据类型后面可以使用不同的声明符。例如: int i =1024, *p = &i, &r = i; //i是一个int类型的数据,p是一个int型的指针,r是一个int型引用。对于int *p,其和int* p 的含义一样,都表示int类型的指针原创 2017-06-23 16:15:21 · 20440 阅读 · 0 评论 -
C++Primer &、*符号的多重定义问题
& 和*这样的符号,既能用作表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了符号的意义:int i = 42;int &r = i; //&紧随类型名出现,因此是声明的一部分,r是一个引用int *p; //*紧随类型名出现,因此是声明的一部分,p是一个指针pp = &i; //&出现在表达式原创 2017-06-23 11:26:13 · 417 阅读 · 0 评论 -
C++Primer第五版 Page39如何输入文本结束符
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时(例如需要将输入读到一个int变量中,但实际从键盘输入的是字符),istream对象的状态会变成无效。处于无效的istream对象会是条件变为假。 当从键盘向程序输入数据时,对于如何指出文件结束符,不同的操作系统有不同的实现。在W原创 2017-06-09 21:09:01 · 327 阅读 · 0 评论 -
C++11标准的main()函数的返回类型为什么必须是int类型
在C/C++ 中,不返回任何信息的函数原型为“void function(...);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main() 。然而这种做法是错误的!C++Primer第五版中文版(Page28)明确指出,main()函数的返回类型必须是int类型,即整数类型。虽然在一些编译器中,void main() 可以通原创 2017-06-08 19:26:15 · 11264 阅读 · 0 评论 -
关于C++类成员函数分析
c++的两大特色是多态和模板。其中多态是通过继承和虚函数来实现的,其中虚函数是通过每个对象里面的虚表来实现的。如果这个对象的类有虚函数,那么这个类就有一张虚表,存的是每个虚函数的入口地址,而这个类的每个对象,都会有一个4字节的指针,指向这张虚表,这个就是虚指针。上面一段话很多人都知道,但是如果问普通成员函数,编译器是怎么找到它的入口地址的呢?也就是说,怎么进行调用?为什么A类一个foo函数转载 2017-06-04 16:03:22 · 617 阅读 · 0 评论 -
关于Malloc内存分配函数的解析
原文地址:http://blog.csdn.net/xw13106209/article/details/4962479一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节转载 2017-10-15 21:53:28 · 778 阅读 · 0 评论