网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月28日
漏签
0
天
c语言吧
关注:
798,876
贴子:
4,357,598
看贴
图片
吧主推荐
视频
游戏
32
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
不懂,上边我有弄#define NUMBER 20 ,那个第8行,输num就搞不下
只看楼主
收藏
回复
恹
花辞树
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这是改了num的运行结果,3号后面下不去了。
[ ]里改成NUMBER,倒有可以。什么原理???原理???原理???
这下边的图是正常改成NUMBER的代码和运行。
正常的运行结果↓
恹
花辞树
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
dd
2025-07-28 05:58:13
广告
不感兴趣
开通SVIP免广告
恹
花辞树
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我这个num的值是键盘上输入的。
GTA小鸡
吧主
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
第8行没有初始化num就使用了num的值,数组长度不可知
恹
花辞树
异能力者
6
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
翻了下书,说是[ ]里的元素个数必须是常数。
那,为啥那个运行就到3就不动了。
错的代码里,我把num改为4,也是只运行到3号就不动了。
这是啥缘故???缘故?
星尘喵
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你用一个变量初始化数组本身就是错的,更何况那个变量还没初始化。
先输入num,然后const int NUM=num;,然后再int fen[NUM];
一介书生hgg
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我感觉这个贴吧的全是辣鸡
一周休七日
帕秋莉糕
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
int fun[num]时num是多少未知
2025-07-28 05:52:13
广告
不感兴趣
开通SVIP免广告
卧槽灭绝了
团子家族
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
emmm,C语言的数组维度应该不能从键盘输入(我已经混乱了,看见有人搞成功过,但是我还是觉得不能),如果要从键盘输入的话我一般用malloc来分配内存
爱你一万年
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你上面才定义了num,下一行就定义num数值的断组?你觉得没问题?定义数组长度,只能用常数。
贴吧用户_54U4eeb
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
数组定义时大小必须是确定的。
int *fen;
int num,max;
scanf("%d",&max);
fen=(int *)malloc(max*sizeof(int));
int i=0;
do
{scanf("%d",&num);
if(num<0||num>20)
printf("请输入0到20");
else {fen[i]=num;i++;}
}while(i<=max-1)
GAtties
彩虹面包
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
用未初始化的变量定义变长数组的长度,这是未定义行为
未定义行为的表现和编译器有关,比如我用的gcc直接一点输出都没程序就直接崩了
无声的硝烟
低能力者
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
1. fen[NUMBER]与fen[num]:
C语言是编译型语言,程序的编译过程中需要为变量分配 确定的 内存空间,因此标准C不支持使用 变量 作为初始化时下标的做法。
那么为什么fen[NUNBER]这样写是允许的呢?这个问题涉及到编译的一个阶段叫“预编译”。顾名思义,预编译是在编译之前的工作,它转化以#开头的行(引用、定义的宏等)。比如预编译阶段,NUMBER这6个字母会被替换为20,后续编译过程中看到的就只是int fen[20];(和你直接写int fen[20]效果完全相同,定义宏的目的是为了程序美观,后续方便修改和拓展)从始至终,NUMBER不是一个变量,仅仅是一个宏。
对于fen[20](预编译转换来的也一样),编译器会指明函数执行时,在栈上分配一个长度为20*int大小的空间;而fen[num]则不一样,编译器根本无法知道num在运行时的值,也就无法在编译时分配相应的大小。即便是程序的上一行明明白白写着int num=4,这个4也是运行时的值,编译时理论上并不会考虑到,仍然认为num是个变量,编译器才不管你前面是怎么赋值怎么计算的。因此,在标准C中这种写法是不被允许的,这也是编译型语言和解释型语言一个典型的区别。(解释型语言是边解释边运行,所以同样的情况是一定知道数组长度的)
但是,有些编译器的确会为这种特殊的写法做相应的语法和语义变通。虽然无法在编译时确定数组实际的长度,但是可以将其分配空间的位置从在栈上改为在堆上(你需要先了解一些操作系统和编译原理的知识),或者用预分配足够大空间等其他方法来实现。你的编译器没有报错,显然是做了相应修改的。
SwetTiger
低能力者
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
C99之后可以用变量做数组参数了,但是你的编译器得支持
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示