啪啪啪:动态数组|学习笔记

简介: 快速学习啪啪啪:动态数组

开发者学堂课程【你的第一门 C 语言课快速学习啪啪啪:动态数组】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/444/detail/5468


啪啪啪:动态数组


动态数组案例

C 语言不允许修改在运行中的数组中的空间大小,不能定义动态数组

#incLude .h>

int main( )

{

int n,i;

printf("请输入字符的个数; ");

scanf ("%d" &n) ;

//定义一个字符数组,不仅定义了动态数组

char a[n+1 ]

printf("请开始输入字符: ");

//依次传入数组中

for(i=0;i

{

scanf("%C",&a[i]) ;

//a[i]其实就是一个变量

}

a[n] ='\0' ;

//输出结果

printf("你输入的字符串是: s\n",a) ;

return 0 ;

}

保存退出运行gcc test1.c&&./a/out

结果:

请输入字符的个数:17

请开始输入字符: I Love FishC. com !

你输入的字符串是:I Love FishC. com[fishc@localhost s1e18]$

结论:

c++也能执行变长数组,在执行过程中来指定变量数组的长度

ISOC99中允许可变长度的自动阵列,并且作为扩展 GCC 接受 C90模式和 C++。这些数组的声明与任何其他 automatie 数组一样,但其长度不是常量表达式。储藏室是在声明点分配,并在包含声明的块8609B 退出时解除分配。

修改代码:

#incLude .h>

int main( )

{

int n,i;

printf("请输入字符的个数; ");

scanf ("%d" &n) ;

//定义一个字符数组,不仅定义了动态数组

char a[n+1 ]

printf("请开始输入字符: ");

//添加getchar();读取换行

getchar();

//依次传入数组中

for(i=0;i

{

scanf("%C",&a[i]) ;

//a[i]其实就是一个变量

}

a[n] ='0' ;

//输出结果

printf("你输入的字符串是: s\n",a) ;

return 0 ;

}

保存退出运行gcc test1.c&&./a/out

结果:

请输入字符的个数:17

请开始输入字符: I Love FishC. com !

你输入的字符串是:I Love FishC.Com

[fishc@localhost s1e18]$

结论:修改完成后,代码显示正常

 测试访问数组边界(故意出错版)

#include

int main( )

int a[10],i;

for(i=0;i<=10;i++)

{

a[i] = i;

}

for(i=0;i<=10;i++)

{

printf( "%d\n",a[i]);

}

return 0 ;

保存退出运行gcc test2.c&&./a/out

结果:

0

1

2

3

4

5

6

7

8

9

10

结论:发现并没有报错

这样程序出错时不会出现毁灭性错误

修改为正确代码:

#include

int main( )

int a[10],i;

for(i=0;i<10;i++)

{

a[i] = i;

}

for(i=0;i<=10;i++)

{

printf( "%d\n",a[i]);

}

return 0 ;

保存退出运行gcc test2.c&&./a/out

结果:

0

1

2

3

4

5

6

7

8

9

10

发现结果一样,这就是访问数组边界

相关文章
|
存储 设计模式 算法
【数据结构】ArrayList和顺序表
【数据结构】ArrayList和顺序表
57 0
|
程序员 C++
7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要动态增加或减少存储空间。
100 0
|
存储 设计模式 算法
数据结构之第四章、ArrayList和顺序表
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:【说明】ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的和Vector不同,
53 0
|
存储 人工智能 编译器
动态数组进阶
动态数组进阶
|
存储 Java C语言
【Java数据结构】ArrayList顺序表
我们平时很喜欢使用的数组,就是顺序表! 下面我们将以 “模拟ArrayList” 的视角来盘一盘顺序表吧!
75 0
C动态数组
C动态数组
93 0
C动态数组
【数据结构初阶】数组栈和链式队列的实现
【数据结构初阶】数组栈和链式队列的实现
|
存储 Java 索引
线性表之动态数组(ArrayList)的自实现
线性表之动态数组(ArrayList)的自实现
线性表之动态数组(ArrayList)的自实现
|
编译器 C++
【C++】动态数组
那啥时候我们需要定义动态数组呢?
244 0
【C++】动态数组
|
人工智能 C语言 C++
啪啪啪:动态数组
啪啪啪:动态数组