</pre><span style="font-size:14px;"></span><p></p><pre name="code" class="cpp">
今天的这篇文章是我第一次利用博客来巩固和学习我c++的一些重要的知识,我不想在走马观花地看一些稀疏零散的内容,所以我希望能通过自己写博客来强制自己耐心阅读一些基础的知识,从而更好的学习。
我阅读的测c++基础书籍是《c++primer》听说这个是入门的经典教材式的书籍,我想好好地去把握。
首先我想弄清楚的就是c++中指针和引用的关系,所以我挑选的就是第二章节的内容,变量和基本类型。
目录
基本内置类型
变量
复合类型
const限定符
处理类型
自定义数据结构类型
下面正题开始了
分割线
——————————————————————————————————————————————————————————
1.基本内置类
注意:1。其中是整型中(int,short,long 和long long)都是带符号的,也可以是无符号的,用unsingned int 来表示可缩写为unsigned.其余类似,但不可缩写。
字符类型有三种但是,表现形式只有带符号的和无符号的两种。具体表现由编译器来决定。
2。切勿混用带符号类型和无符号类型。带符号类型赋值给无符号类型是需要一定的运算的。输出也有可能大相径庭。
新概念:字面值常量。例如:42,432.5,或者'a',“s".
3。c++支持分离式编译(separate compilation),但是,在多个文件中使用同一个变量就要进行多处的声明,但是定义只能够定义一次。
4。标识符略,,只能由字母,数字和下划线组成,其中必须一字母和下划线开头,而且长度是没有限制的,对大小写敏感。.
5。作用域
当嵌套作用域时,内部作用域能够用
std::cout << <span style="color:#FF0000;"><em><strong>::reused</strong></em></span><<" "<<unique<<std::endl;
来显式调用外部的全局变量。
二。
接下来我想针对指针和引用的知识进行概括。
1。引用
定义:为对象其另外的一个名字。
int ival=1024;
int &refVal=ival; //refVal指向ival(是ival的另外的一个名字,<span style="color:#FF0000;">引用必须初始化,而且一直和初始值<span style="font-family:KaiTi_GB2312;">对象绑定在一起的。无法另引用重新绑定在另一个对象</span></span>
int &refVal2; //报错:引用必须被初始化
引用就是别名。
refVal=2;
int li=refVal;//这两行都是和对ival直接操作是一样的
引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。,引用不是对象,表现在它没有实际的地址。因此不能用指针来指向引用。
int &refVal4=10;//不能是字面值
double daval=3.14;
int &refen=daval;//都是错误的。
2。指针
区别:指针和引用不一样,指针是一个对象。允许对指针进行赋值和拷贝。而且可以指向不他不同的对象。其二,指针无需在定义时就要初始化。如果指针没有初始化就有一个不确定的值。
int ival=2;
int *p=&ival;//P存放ival的地址,或者说P是指向变量ival的指针。实际等于int <span style="font-family:KaiTi_GB2312;">*p;p=&ival;//一定要分开的,int *只是一个指针的类型。</span>
(1)指针值:1。指向一个对象2。指向紧邻对象所占空间的下一个位置。
3。空指针,没有指向任何一个对象。4。无效指针,也就是上述情况之外的其他值。
试图拷贝或以其他的方式访问无效指针的值都会引发错误。后果不堪设想。
(2)解引用符。(*)
*p=0;//<span style="font-family:KaiTi_GB2312;">赋值cout<<*p;//输出</span>
(3)空指针
int *p1=nullptr;
int *p2=0;
int *p3=NULL;//三种方式都是等价的。//第三种方式用到头文件的cstdlib。
(4)赋值不同
p=&val;
*p=o;//这个是改变val的值,不是改变指针所指向的地址。赋值永远改变的都是等号左边的值
(5)void*指针
是一种特殊的指针,能指向任何对象的地址。
double obj=3.14,*pd=&obj;
void *pv=&obj;
pv=pd;//都是正确来的
(6)指向指针的引用
int i=42;
int *p;;
int *&r=p;注意此种定义指向指针的引用的方式。(要了解,r究竟是什么要从右左来阅读,最开始的一个是&说明是一个引用来的)
r=&i;
*r=0;
三。const限定符
一般来说,用了const来限定一个类型的变量,那么这个变量是不能够改变的。就是说必须要在定义时初始化,而且其后不能够再为它赋值。
(1)const引用。
const引用允许引用一个const类型,也可以引用一个非const类型,但是一般都不能利用他们来进行操作。(有诸多麻烦我也不懂)
int=2;
const int &r1=i;
const int &r2=42;
const int &r3=r1*2;
int &r4=r1*2;//error;
int i=2;
const int &r2=i;
int &r1=i;
r1=0;
r2=0;//errror
类型不同也不能绑定。会引发临时量对象转换。
(2)const指针
const指针有分两种,一种是指向常量的指针,一种常量指针。
指向常量的指针是不同够通过这个指针来改变变量值,而常量的指针是不能够改变指针本身的变量值。
const double pi=3.14;
double *ptr=π//错误,普通指针
const double *cptr=π
*cptr=42;//错误,不能赋值
常量指针:
int errNumb=0;
int *const cuiErr=&errNumb;//这个必须在此初始化
区分:近的不能改变本身值,远的不能通过桥梁来改变值。
顶层const和底层const不知道什么鬼来的。
(3)c++11新增的constexpr类型,规定了指针是顶层的常量指针。