开发者学堂课程【你的第一门 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 ;
}
保存退出运行:g
cc 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 ;
}
保存退出运行:g
cc 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 ;
保存退出运行:g
cc test2.c&&./a/out
结果:
0
1
2
3
4
5
6
7
8
9
1
0
结论:发现并没有报错
这样程序出错时不会出现毁灭性错误
修改为正确代码:
#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 ;
保存退出运行:g
cc test2.c&&./a/out
结果:
0
1
2
3
4
5
6
7
8
9
1
0
发现结果一样,这就是访问数组边界