c++基础类型(一)

本文详细解析 C++ 中的指针与引用概念,包括它们的基本用法、区别及注意事项。同时介绍了基本内置类型、复合类型、const 限定符等内容。

</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类型,规定了指针是顶层的常量指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值