鱼C论坛

 找回密码
 立即注册
查看: 1906|回复: 7

[已解决]好奇問問陣列的錯誤用法問題

[复制链接]
发表于 2022-5-20 13:39:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我看說
情況一:宣告一個陣列,但未初始化,並且未對其進行設值,對這樣的陣列取值
情況二:試圖取出超過陣列長度數量的值 (比如陣列長度2,取陣列的[2]等
將會得到無法預測的值
很好奇這個值是真的無法預測嗎?
如果是這樣它的隨機性豈不是比rand()函數還高!?
最佳答案
2022-5-20 14:02:30
$ cat main.c
#include <stdio.h>

int main(void) {
    int i;
    printf("%d\n", i);
    return 0;
}
$ gcc -g -Wall -o main main.c
main.c: In function ‘main’:
main.c:5:5: warning: ‘i’ is used uninitialized [-Wuninitialized]
    5 |     printf("%d\n", i);
      |     ^~~~~~~~~~~~~~~~~
main.c:4:9: note: ‘i’ was declared here
    4 |     int i;
      |         ^
$ ./main
21979
$ ./main
21969
$ ./main
21946
$ ./main
21881
$ ./main
22085
$ ./main
21937
$ ./main
21998
$ ./main
21968
$ ./main
21900
$ gcc-debug -o main main.c
main.c: In function ‘main’:
main.c:5:5: warning: ‘i’ is used uninitialized [-Wuninitialized]
    5 |     printf("%d\n", i);
      |     ^~~~~~~~~~~~~~~~~
main.c:4:9: note: ‘i’ was declared here
    4 |     int i;
      |         ^
$ ./main
-983965280
$ ./main
-694274387
$ ./main
-1296513248
$ ./main
-1056986820
$ ./main
-1222945282
$ ./main
-559299812
$ ./main
247162282
$ ./main
-1059543984
$ ./main
2049681885
$ ./main
46734574
$ ./main
589615768
$ ./main
-1605572144
$ ./main
-1044684446
$ ./main
-1891066690
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-20 13:53:27 From FishC Mobile | 显示全部楼层
能解释一下啥叫陣列吗
一维数组??二维数组???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 13:59:40 | 显示全部楼层
wp231957 发表于 2022-5-20 13:53
能解释一下啥叫陣列吗
一维数组??二维数组???

喔,我們這邊叫陣列XDD
就是數組(Array)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 14:02:15 From FishC Mobile | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-20 13:59
喔,我們這邊叫陣列XDD
就是數組(Array)

情况①,取值应该是可以取的,但是是啥玩意,未知
情况②,是程序禁区,不可以取的,即使运气好,能取到数据,也是未知
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 14:02:30 | 显示全部楼层    本楼为最佳答案   
$ cat main.c
#include <stdio.h>

int main(void) {
    int i;
    printf("%d\n", i);
    return 0;
}
$ gcc -g -Wall -o main main.c
main.c: In function ‘main’:
main.c:5:5: warning: ‘i’ is used uninitialized [-Wuninitialized]
    5 |     printf("%d\n", i);
      |     ^~~~~~~~~~~~~~~~~
main.c:4:9: note: ‘i’ was declared here
    4 |     int i;
      |         ^
$ ./main
21979
$ ./main
21969
$ ./main
21946
$ ./main
21881
$ ./main
22085
$ ./main
21937
$ ./main
21998
$ ./main
21968
$ ./main
21900
$ gcc-debug -o main main.c
main.c: In function ‘main’:
main.c:5:5: warning: ‘i’ is used uninitialized [-Wuninitialized]
    5 |     printf("%d\n", i);
      |     ^~~~~~~~~~~~~~~~~
main.c:4:9: note: ‘i’ was declared here
    4 |     int i;
      |         ^
$ ./main
-983965280
$ ./main
-694274387
$ ./main
-1296513248
$ ./main
-1056986820
$ ./main
-1222945282
$ ./main
-559299812
$ ./main
247162282
$ ./main
-1059543984
$ ./main
2049681885
$ ./main
46734574
$ ./main
589615768
$ ./main
-1605572144
$ ./main
-1044684446
$ ./main
-1891066690
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-20 14:10:08 | 显示全部楼层

我用的編譯器每次
int main(void) {
    int i;
    printf("%d\n", i);
    return 0;
}
都會打印出0
看來這個"不可預測"可能是因為每個編譯器不一樣所以才不能確定
但如果是單一編譯器的話,估計就會是可預測的結果
我只是想說既然這樣就能達成不可預測性,那為什麼rand()還會是可預測的隨機數XD
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 14:12:50 | 显示全部楼层
不要依赖这个随机,不同的编译器,不同的编译选项
这个有可能随机,也有可能不随机

1.png
2.png

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +1 收起 理由
一隻太平洋睡鯊 + 3 + 3 + 1 確實,就是好奇想問問2333

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 14:34:59 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-5-20 14:10
我用的編譯器每次

都會打印出0

rand是用数学算法实现的一个伪随机函数
这个不可预测 可以理解成是 你无法预测它是不是随机,如何随机,随机程度有多高
就像这个程序,输出没有初始化的局部变量,每一次都输出0一样
程序中需要一个随机数,你总不能弄一个没有初始化的局部变量吧?你就能确定这个没有初始化的局部变量一定是随机的?

参考
/dev/random
http://www.what21.com/u/10007/9089274064966658452.htm

理论上来说,我们存在的这个世界是不存在随机的,量子的运动也是有规律的
我们完全可以逆向出任意一个随机数,当然我们人类目前的算力还无法做到这一点

那么,你说这个随机数是真正的随机数,还是伪随机数?
理论上可以逆向出这个随机数来,但是我们人类目前的算力无法做到这一点

你如何定义这个随机数?

“你无法预测它是不是随机”
其实这么说并不准确,应该说成是
你现在无法预测它是不是随机
未来可就不一定了

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 感覺就像不存在真正的自由意志一樣/w\

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表