C/C++(数组概念)

简介: C/C++(数组概念)

数组的概念和定义

什么是数组

数组,就是多个元素的有序“组合”。

生活中的“数组”:

image.png

  1. 由多个大小相同的小柜子组成
  2. 这些小柜子,有自己对应的编号。
  3. 而且这些编号是递增顺序。


C和C++语言中的数组:


  1. 由多个大小相同的小柜子组成 => 相同大小的内存块组成,即相同类型的数据
  2. 这些小柜子,有自己对应的编号 => 编号从0开始递增
  3. 而且这些编号是递增顺序。

数组的“容量”是不能改变的。


数组的定义


数组和其他变量一样,需要先定义,再使用。

实例:

int   a[8];  

//定义了一个数组,

//数组名是“a”,

//包含8个元素,

//每个元素是int类型的变量

a[0] = 20;

a[1] = 5;

2f3eb0b53a79434ea4f0f9f5cb5aaad3.png


说明:


定义了如下数组:


int a[8];


就相当于定义了8个int类型的变量


而且这8个变量是连续存储在内存中的。(8个依次相连的邻居)


实例:


某渣男,想要记录他10个女友的身高,可以定义如下:


float  girlFirends[8];


girlFirends[5] = 1.78;


int  ages[50];


ages[0] = 18;


ages[49] = 19;


数组的初始化

定义数组的同时,设置数组内的元素值。


int a[8] = {20, 5, 30, 13, 18};


printf("%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4]);


或者


cout << a[0] << “,” << a[1] << “,” << a[2] << “,” << a[3] << “,” << a[4];


int a[8] = {0};  //把数组的所有元素都初始化为0


printf("%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4]);


int a[8] = {1};  //把a[0]初始化为1,其它值都初始化为0


int b[8] = {1, 5};  //把a[0]初始化为1,a[1]初始化为5,其它值都初始化为0


int  a[] = {1,2,5}; //定义数组a, 这个数组包含3个元素!


              // 根据“初始化列表”,自动计算数组的容量


高逼格用法(在某些特殊场合使用)


优点:但数组的成员较多时,该方式可读性高


缺点:仅仅C编译器支持,C++编译器中不支持,即C++程序中不能使用。

//每周的锻炼时间:
       int exercises[7] = {
              [1] = 1,   //a[1] = 1
              [3] = 2,   //a[3] = 2
                            //没有指定的成员,被初始化为0
       };

常见错误

int  a[2] = {1,2,5}; //错误!初始值太多,大于数组的容量

int  a[3];

a = {1, 2, 3};  //不能对数组名直接赋值!

int  a[3];

a[3] = 10;  //下标越界!下标的取值范围是 0, 1, 2


数组元素的访问

数组的内元素的访问



通过下标访问对应的元素。


特别注意, 数组的第一个元素的下标是0, 而不是1


int  girlSize[10];


a[5] = 38;  


printf(“%d\n”,  a[5]);


cout << a[5];


另类用法:


使用下标的方式访问string字符串

string name = "Rock";
       //name[i]是string字符串中的第i个字符(char类型)
       for (int i=0; i< name.length(); i++) {
              cout << name[i];
       }
    name[0] = 'L';  //name变成:Lock
       cout << endl << name;

数组的越界

数组的越界, 是指下标超出正常的范围!

例如:

int  a[10];  //a[-1] 和 a[10]都是越界!


越界的后果

越界非常危险,可能导致数据破坏,或其他不可预期的后果!

越界的控制

需要程序员自己手动控制,编译器不做任何检查!因为,C/C++语言完全信任程序员!


C语言字符串的存储、初始化

字符串,是通过“字符数组”(元素类型为char的数组)来存储的!

demo1

   char  name[10];
       name[0] = 'L';
       name[1] = 'o';
       name[2] = 'c';
       name[3] = 'H';
       name[4] = 0;  //字符串结束符0,就是 '\0'
       printf("姓名:%s", name);  //LocH
name[2] = 0;
       printf("姓名:%s", name);   //Lo

demo2

 char  name[10] = "LocH"; //相当于char name[10] = {'L', 'o', 'c', 'H', '\0'};
       printf("姓名:%s", name);

demo3

 char  name[] = "LocH";  //相当于:name[5] = "LocH"
       printf("%d", sizeof(name)); //5

C语言字符串的输入输出

#include <stdio.h>
#include <Windows.h>
int main(void) {
       char name[16];
       char addr[64];
       printf("姑娘芳名?\n");
       scanf("%s", name);
       //此时输入缓冲区中还有一个回车符
       //清空输入缓冲区
       fflush(stdin);
       printf("姑娘家住何地?\n");
       gets(addr); //读一行,包括一行中的空格
       printf("家住%s 的%s, 我中意你!\n", addr, name);
       system("pause");
       return 0;
}


相关文章
|
2月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
78 4
|
1月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
21 0
|
2月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
3月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
43 4
|
3月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
114 0
|
4月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
31 6
|
4月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
45 6
|
4月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
54 5
|
4月前
|
JSON Go C++
开发与运维C++问题之在iLogtail新架构中在C++主程序中新增插件的概念如何解决
开发与运维C++问题之在iLogtail新架构中在C++主程序中新增插件的概念如何解决
45 1
|
3月前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组