每日一练(三十四)


《每日一练合集》

2.11 C风格的字符串

C风格的字符串有两种:

  • 字符串常量,由双引号包括的字符序列就是字符串常量,注意字符串常量存储在常量区,但是以数组定义的字符串常量是被拷贝到栈(或者静态区)中的,所以以数组定义的字符串是可以修改元素的。
  • 末尾自动添加了结束符\0的字符数组

注意,结束符就是\0,值为0,也就是NULl。有结束符的字符序列才可以称为字符串。

在这里插入图片描述

2.12 字符数组

字符数组的初始化可以使用字符常量或者常量字符串进行初始化:
在这里插入图片描述

而且在初始化的时候要注意,结束符也是占空间的

结束符在字符串的处理中相当重要!!!这是因为许多的字符串处理函数都是以NULL为结尾处理字符串的。

2.13 二维数组的声明与初始化

二维数组的初始化分为两种:

  • 按行初始化,给出每行的括号
  • 顺序初始化,二维数组也是顺序存储的,所以顺序初始化没毛病

在声明初始化的时候,只有第一维是可以省略的,这个规则适用于更高维数的数组。二维数组来说就是,列数不可省略,如下:
在这里插入图片描述

2.14 二维数组的存储

首先,所有数组在内存中都是线性存储的,对于二维数组也是,但二维数组的线性存储分为两种情况:

  • 行优先存储:这是多数编译器默认的,先顺序存储第一行的元素,再顺序存储第二行的元素,以此类推
  • 列优先存储:先存储第一列的元素,再存储第二列的元素,以此类推

C/C++中默认按照行优先存储,可以在逻辑上转换为一维数组,即:

在这里插入图片描述

比如如下面这些题:
在这里插入图片描述
在这里插入图片描述

还有,在将二维数组转换为一维数组的时候,切记要通过指针的形式来做,不要凭感觉去,因为数组下标是从0开始的,很可能出现失误,如下:
在这里插入图片描述

2.15 二维数组的动态声明

在这里插入图片描述

注意,当动态声明数组的时候,数组相当于一个链表,因为数组的a[k]都是一个int*,所以动态申请的二维数组的元素不是连续的,所以我才说相当于一个链表。

注意释放的时候,先释放a[i],再释放a。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值