C++笔记(一)~基础

举报
海轰Pro 发表于 2022/08/26 16:32:27 2022/08/26
【摘要】 类型选择(经验准则)当确定数值为非负时,选用无符号类型一般使用int进行数值运算,如果超过int的最大值,则选用long long执行浮点数运算,选用double当一个算术表达式既有int,又有无符号数时,int会转换为无符号数示例代码#include<iostream>using namespace std;int main(){ unsigned u=10; int i=-42;...

类型选择(经验准则)

  • 当确定数值为非负时,选用无符号类型
  • 一般使用int进行数值运算,如果超过int的最大值,则选用long long
  • 执行浮点数运算,选用double


当一个算术表达式既有int,又有无符号数时,int会转换为无符号数

示例代码

#include<iostream>
using namespace std;
int main(){
   unsigned u=10;
   int i=-42;
   // int + int 
   // -42 + -42 = -84
   cout<<i+i<<endl;
  
   // unsigned + int : int 会默认转换为unsigned
   // 10+ (2的32次方-42)=294967264
   cout<<u+i<<endl;
}

运行结果

注:

  1. 在海轰电脑上,int是32位的,所以INT_MAX=2的31次方-1=2147483647,INT_MIN=-2147483648
  2. -42(int)=(2的32次方-42)=294967254(unsigned) 为什么呢?其实int和unsigned都是32位存储的(以海轰电脑为例),而区别就在于第一位数字,在int中是表示符号:0正1负,而在unsigned中32位都是表示数字的,没有符号位。所以int的最大值就是01111111...111(31个1),unsigned的最大值就是111....111(32个1)。


对象

对象是指一块能存储数据并具有某种类型的内存空间


初始化与赋值的区别

  • 初始化:创建变量时,赋予其一个初始值
  • 赋值:把对象的当前值擦除,并以一个新的值替代


声明与定义

  • 定义:负责创建与名字有关的实体
  • 声明:使得名字为程序所知

区别:简单的说,定义就是创建了一个新的实体,一个实体只可以定义一次,而声明是指需要使用这个实体时,需要要让程序知道有这样一个实体(比如实体a在一个文件里面被定义了,而在另一个文件需要使用a实体,那么只需要再声明:使用extern就可以了,意思就是声明后在这个文件可以直接使用上一个文件中的实体a了,不需要再重新定义了)

注:变量能且只能被定义一次,但是可以被多次声明。


全局变量与局部变量示例

#include<iostream>
using namespace std;
int a=2;
int main(){

    int b=3;
    cout<<"a="<<a<<"b="<<b<<endl;// a=2 b=3
  
    // 新建局部变量a 覆盖了全局变量a
    int a=4;
    cout<<"a="<<a<<"b="<<b<<endl;// a=4 b=3
  
    //显示访问全局变量a
    cout<<"a="<<::a<<"b="<<b<<endl;  // a=2 b=3
}


引用

引用不是对象,只是为一个已经存在的对象起的一个别名,并且可以通过这个别名修改原来对象的值。

简单的理解: int a=1; int &ra=a; 意思:a对象的值是1,通过引用,现在ra指向的值也是1,而且通过ra也可以改变原来的值,比如现在再执行ra=2,那么原来的值就变成了2,此时a=2,ra=2.区别就在于a是对象,而ra只是引用,不是一个对象。同时一旦ra是对a的引用,那么之后就不可以变成其他对象的引用了。(类似这个别名已经被a用了,其他对象就不可以再用了)

注:引用必须被初始化

测试代码

#include<iostream>
using namespace std;
int main(){
   int i;
   int &ri=i;
   i=5;
   ri=10;
   cout<<"i="<<i<<" ri="<<ri<<endl;// i=10 ri=10
}

测试结果


指针与引用的区别

  • 指针本身就是一个对象,而引用不是对象。
  • 指针在它的生命周期可以指向多个对象,但是引用只可以与一个对象进行绑定
  • 指针在定义时可以不用初始化,而引起定义时必须初始化。


不可以将int变量直接赋值给指针,即便这个int变量是0

#include<iostream>
using namespace std;
int main(){
  int i=0;
  int *p=i;//错误
  int *p=1;//错误
  int *p=0;/正确
}

正确做法:使用取地址符&

#include<iostream>
using namespace std;
int main(){
  int i=0;
  int *p=&i;
}


const对象必须初始化

#include<iostream>
using namespace std;
int main(){
    const int a=0;// 正确
    const int b; //  错误
}

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。