C++基础入门(1)

一.C++的初始化

1.初始化列表的解决方案

int main()
{
  int a=10;
  int b(10);
  int c{10};
  
  int ar[10]={1,2,3,4,5,6,7,8,9,10};
  int br[10]={1,2,3,4,5,6,7,8,9,10};
}

初始化概念后直接跟{},统一进行初始化。

()的初始化与{}的初始化区别

int main()
{
  int a(10);
  int sum();
  int num{};
  return 0;
}

在这段代码运行结果中不会出现sum这个变量,但会出现num这个变量。sum会被认为是函数声明。

{}具有更强的指向性,对于程序要求会更加严格。

int main()
{
  int a=12;
  int b=12.23;
  return 0;
}

这段代码可以编译通过,只是b的值为12.

int main()
{
  int a{12};
  int b{12.23};
  return 0;
}

而这段代码会报错,因为{}具有更强的指向性。

2.C++的输入输出

我们知道在C语言中

#include <stdio.h>中有三个

stdin(标准输入)  stdout(标准输出)  stderr(标准错误)

在C++中

#include <iostream>

cin=>stdin  //buffer:有缓冲区

cout=>stdout   //buffer

cerr=>stderr    //no buffer 没有缓冲区

clog=>stdout   //buffer

还要加上using namespace std;

在C++中

cin>>a>>ch;
cout<<a<<ch<<endl;

>>为提取符,提取数据给a,ch

<<为插入符,插入数据给a,ch.

endl相当于换行

cout显示在屏幕上,cerr定向在文件中

int main()
{
  char ch[5]={'a','b','c','d','e'};
  printf("%s\n", ch);
  return 0;
}

在数组中默认以/0做结尾,如果没有遇见/0会一直打印,直到遇见/0结束。

int main()
{
  const  int len =128;
  char str[len]{};
  cin >>str;//空格
  cin.getline(str,len);
  cin.getline(str,len,'#');
  cout <<str <<endl;
  return 0;
}

在cin与scanf中默认以空格做结束

但可以使用getline,getline默认以换行结束写入,也可以自定义,如上就定义的#作为结束标志,但并不将#输入字符串中。

3.C++中的const关键字

在C语言中const 以变量为主

int main()
{
  const int n =10;
  int ar[n]={1,2,3};
  return 0;
}

在这段代码中,n 会报错,因为数组方括号中为整型常量值,但C中const以变量为主。

const 在C++中 以常量为主,意为只可读不可写。

int main()
{
  const int a=10;
  int b=0;
  int *ip=(int *)&a;
  *ip=100;
  b=a;
  printf("a=%d b=%d *ip=%d\n",a,b,*ip);
  return 0;
}

运行结果如下

为何在监视器中a 的值为100 但实际输出a是10呢?

在C++编译器中,当遇到const ,a会被10直接替代,而不是从地址空间取值,100只是地址空间中的值,但a实际上具有常性,至可读不可写。

当const在*左边时修饰的是指向,这是,指针的指向是可读不可写的

当const在*右边时修饰的是指针自身,这时指针自身是可读不可写的

int main()
{
  int a=10,b=20;
  int *p1=&a;
  *p1=100;//ok
  p1=&b;//ok
  
  const int *p2=&a;
  *p2=100;//error
  p2=&b;//ok
  
  int const *p3 =&a;//与上一个情况相同

  int *const p4=&a;
  *p4=100;//ok
  p4=&b;//error

  const int *const p5=&a;
  *p5=100;//error
  p5=&b;//error
  
  return 0;
   

4.引用(别名)

引用的定义:类型&引用变量名称=变量名称。

这就是引用变量 定义。&和类型结合起来为引用符号,不是取地址符,代表别名的意思。

int  main()
{
   int a=10;
   int b=a;
   int &ra=a;
   return 0;
}

ra就是a 的别名

引用的三要素

1.没有空引用。

2.引用必须要有初值

3.引用不分等级(没有二级引用,三级引用之说)

引用的函数调用

void Swap(int *ap,int *bp)
{
  if(NULL==ap||NULL==bp)
  return;
  int tmp=*ap;
  *ap=*bp;
  *bp=tmp;
}
int main()
{
  int x=10,y=20;
  Swap(&x,&y);
  return 0;
}

使用指针时必须要在前进行断言或者用 if语句判断,避免空指针

但用引用时不用判断,因为引用自身的特性就是不能有空引用

void Swap(int &a,int &b)
{
  int tmp=a;
  a=b;
  b=tmp;
}
int main()
{
  int x=10,y=20;
  Swap(x,y);
  return 0;
}

但引用没有指针灵活,可以给空指针但不能给空引用。

左值与右值

能够取地址的就是左值

不能够取地址的就是右值

将亡值在这两个值中来回摇摆。

另外,由内置类型(不是自己设置的类型)都有常性。

所以c=a+b;是正确的,但a+b=c;是错误的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值