C++学习重难点(二)

今天在打开CSDN,像往常一样刷文章时,看到了几篇有些大佬博主写的c++入门基础知识点总结文章,感觉写的非常好,总结很到位。所以博主我今天在刷完这几篇文章后,抓住几个博主认为平时容易忽略,又有时候会碰到的知识点来做做笔记(在此对那几位大佬博主表达感谢之情,当然博主我也不是厚颜无耻之人,直接复制别人的文章就放到这里),方便博主和其他小伙伴的学习。

下面就让我们一起来看看吧

1.引用:在博主刚开始学习c++时,就天真的以为引用就用在函数传参时取代指针的作用,结果是博主格局小了。

引用和指针的区别
1、引用在定义时必须初始化,指针没有要求。
2、引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体。
3、没有NULL引用,但有NULL指针。
4、在sizeof中的含义不同:引用的结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)。
5、引用进行自增操作就相当于实体增加1,而指针进行自增操作是指针向后偏移一个类型的大小。
6、有多级指针,但是没有多级引用。
7、访问实体的方式不同,指针需要显示解引用,而引用是编译器自己处理。
8、引用比指针使用起来相对更安全。
引用引用场景:

(1)函数传参:这算是初学者大部分人都知道和会用的吧,这里就不多说了。

void Swap(int& a, int& b)

{

int tmp = a; a = b; b = tmp;

}

(2)作为返回值:返回的数据必须是被static修饰或者是动态开辟的或者是全局变量等不会随着函数调用的结束而被销毁的数据。

#include<iostream>
using namespace std;
int& Add(int a, int b)
{
    static int c = a + b;//重点注意这里这个static不能省略,不然结果打印出来的就是7不是3

//这里用ststic定义了c这个变量,就是说Add(3,4)不会执行 static int c = a + b;如果执行就重定义了
    return c;
}

int main()
{
    int& ans = Add(1,2);
    Add(3, 4);
    cout << ans << endl;
}

2.auto关键字:在C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器(小白看了会懵,博主刚开始也是这样)

#include <iostream>
using namespace std;
int main()
{
    int a = 10;
    auto b = &a;   //自动推导出b的类型为int*
    auto* c = &a;  //自动推导出c的类型为int*
    auto& d = a;   //自动推导出d的类型为int
    //打印变量b,c,d的类型
    cout << typeid(b).name() << endl;//打印结果为int*
    cout << typeid(c).name() << endl;//打印结果为int*
    cout << typeid(d).name() << endl;//打印结果为int
    return 0;
}
auto不能用的场景:1.void TestAuto(auto a)auto不能作为函数参数。2.auto b[] = {4,5,6};auto不能直接声明数组。

3.for循环。用法:1.最简单学C语言经常见到的for(int i=0;i<10;i++)

                         2.基于范围的for循环:void TestFor()
                              {
                               int array[] = { 1, 2, 3, 4, 5 };                             
                               for(auto& e : array)//将数组中所有元素乘以2
                                  e *= 2;
                                 for(auto e : array)
                                cout << e << " ";
                                 return 0; }

(这个博主手机备忘录做的笔记里的一张图片,由于符合这个知识点,特地发出来分享一下)

 4.指针空值nullptr:与C语言的NULL相识,NULL被定义为0,在c++中用nullptr用的比较多

用法:(1)用来定义指针初始值:int* p1 = NULL;

(2)在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为关键字引入的。
在C++11中,sizeof(nullptr)与sizeof((void*)0)所占的字节数相同,大小都为4。

好啦,今天的分享就到此结束啦,

本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值