c++ 数组、指针和引用

目录

一、数组

二、指针

三、引用


一、数组

1.一维数组的初始化

  • 对单个元素逐一赋值,利用下标进行赋值
  • 聚合方式赋值,使用大括号{}进行多个元素的赋值。
int a[5]={1,2,3,4,5}
int b[]={1,1,2,2,3,3} //编译器能够获取数组元素个数
int c[10]={1,2,3,4,5}  //前5个元素被赋值,后个元素的值为0

2.字符数组

  • 字符数组中,一个元素存放一个字符(注意是单引号)。
  • 声明字符数组: char word[10];
  • 可以逐个元素赋值,也可以使用聚合方式赋值(没有被赋值的元素默认是空字符'')。
  • 字符数组会将字符串结束符'\0'一起保存。字符串结束符'\0'的作用是提示字符串处理函数该字符串已经结束,不需要再输出。
  • 字符数据不能给字符数组赋值。
    char a[5] = {'H', 'E', 'L', 'L', 'O'};
    char b[5];
    b = a; //错误
    b[0] = a[0]; //正确
  • 字符串处理函数
  •        strcat(字符数组名1, 字符数组名2 )把字符数组2中的字符串拼接到字符数组1中字符串后面,并删除字符数组1中的'\0'。注意字符数组1的长度要足够大,可以装下拼接后的字符串。
  •        strcpy(字符数组名1,字符数组名2)把字符数组2中的字符串复制给字符数组1,相当于字符串2覆盖了原来字符数组1中内容,连同'\0'也一同复制。
  •        strcmp(字符数组名1,字符数组名2)按照ASCII码顺序比较两个数组中的字符串,并返回比较结果。
  • 字符串1=字符串2,则返回值为0;
  • 字符串1>字符串2,则返回值为正数;
  • 字符串1<字符串2,则返回值为负数;
  • 当两个字符串比较时常出现不同的字符,则以第一个不同字符比较结果作为整个比较结果。
  •       strlen(字符数组名)返回字符串实际长度,不包含'\0'。

    二、指针

用来存储内存单元地址的变量类型就是指针类型,所以指针变量就是一个专门用来存放内存地址的变量。

1.指针的声明和赋值

  • 声明:数据类型 *指针变量名 
    int *p;
    float *a, *b;
  • 赋值:
    int i=100;
    int *p = &i;  //指针变量名是p,而不是*p,将变量i的地址赋值给p。
  • 指针变量不能直接赋值。
    int *p;
    p = 100; //错误
  • 没有初始化的指针变量成为“野指针”,一般要在定义指针变量的时候将其初始化NULL。
  • *是指针运算符,&是取地址运算符,&a表示获取变量a的地址;*p表示获取指针变量p中存储的值。
    int a = 1;
    int *p = &a;

    &*p表示先进行*运算,再进行&运算,*p相当于变量a,&*p相当于取变量a的地址。*&a相当于取变量a所在地址中存储的值,即变量a。

  • 指针运算p++,对地址(按照字节存放数据)进行运算,加1并并不代表地址加1个字节,而是加上指针变量数据类型所占的字节数,例如int是4个字节,double是8个字节。
  • 指针可以指向任意类型的数据,包括空类型void。空数据指针可以接受任意类型的数据,可以将其强制转化为所对应的数据类型。
    float a = 1.23f
    void *p = NULL;
    p = &a
    float b = *(float *) p; //将void 指针类型强制转化为float类型指针
  • 指针常量:指向的内存地址不能改变,但是可以改变内存地址中的值。指针常量必须初始化。

格式:数据类型 *const p;

int a = 3, b = 4;
int *const p = &a;
//p =  &b; //错误,指针常量,不能改变指向的内存地址
*p = 1;  //正确,可以改变内存地址中存储的值。
  • 指向常量的指针:指向的内存地址可以改变,但是通过该指针修改内存内容是不允许的。

格式:数据类型 const *p;

int a = 3, b = 4
int const * p = &a;
p =  &b; //正确,可以改变指向的内存地址。
//*p = 1;  //错误,不能通过该指针改变内存地址中存储的值。

三、引用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值