解题思路:
for函数逆使用
注意事项:
如下
参考代码:
#include<stdio.h>
#define MAX 101
int main(){
int num;
scanf("%d",&num);
int a[MAX] = {0};
int* p;
p = a;
for(int i = 0;i<num;i++)
scanf("%d",(p+i));
for(int i = num-1;i>=0;i--)
printf("%d ",*(p+i));
return 0;
}
错误示例:
#include<stdio.h>
int main(){
int num;
int* p;
scanf("%d",&num);
int a[num] = {0}; //此处有错
p = a;
for(int i = 0;i<num;i++)
scanf("%d",(p+i));
for(int i = num-1;i>=0;i--)
printf("%d ",*(p+i));
return 0;
}
Main.c: In function ‘main’:
Main.c:8:9: error: variable-sized object may not be initialized
8 | int a[num] = {0};
| ^~~
Main.c:7:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
7 | scanf("%d",&num);
| ^~~~~~~~~~~~~~~~
Main.c:12:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
12 | scanf("%d",(p+i));
| ^~~~~~~~~~~~~~~~~
核心错误:variable-sized object may not be initialized
中文含义:变长数组(VLA)不允许被初始化(比如= {0})。
原因:你定义的int a[num]中,num是运行时通过scanf输入的变量(不是编译时确定的常量),这种数组被称为 “变长数组(VLA)”。
C 语言规定:变长数组不能在定义时直接用= {0}初始化(编译器无法在编译阶段确定数组长度,也就无法完成初始化)。
对比:如果是int a[10] = {0};(长度 10 是常量),就不会报错,因为编译器能确定长度并初始化。
注:部分高级版本编译器可以这样使用。
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复