好奇問問陣列的錯誤用法問題
我看說情況一:宣告一個陣列,但未初始化,並且未對其進行設值,對這樣的陣列取值
情況二:試圖取出超過陣列長度數量的值 (比如陣列長度2,取陣列的等
將會得到無法預測的值
很好奇這個值是真的無法預測嗎?
如果是這樣它的隨機性豈不是比rand()函數還高!? 能解释一下啥叫陣列吗
一维数组??二维数组??? wp231957 发表于 2022-5-20 13:53
能解释一下啥叫陣列吗
一维数组??二维数组???
喔,我們這邊叫陣列XDD
就是數組(Array) 一隻太平洋睡鯊 发表于 2022-5-20 13:59
喔,我們這邊叫陣列XDD
就是數組(Array)
情况①,取值应该是可以取的,但是是啥玩意,未知
情况②,是程序禁区,不可以取的,即使运气好,能取到数据,也是未知 $ 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
$ 人造人 发表于 2022-5-20 14:02
我用的編譯器每次
int main(void) {
int i;
printf("%d\n", i);
return 0;
}
都會打印出0
看來這個"不可預測"可能是因為每個編譯器不一樣所以才不能確定
但如果是單一編譯器的話,估計就會是可預測的結果
我只是想說既然這樣就能達成不可預測性,那為什麼rand()還會是可預測的隨機數XD 不要依赖这个随机,不同的编译器,不同的编译选项
这个有可能随机,也有可能不随机
一隻太平洋睡鯊 发表于 2022-5-20 14:10
我用的編譯器每次
都會打印出0
rand是用数学算法实现的一个伪随机函数
这个不可预测 可以理解成是 你无法预测它是不是随机,如何随机,随机程度有多高
就像这个程序,输出没有初始化的局部变量,每一次都输出0一样
程序中需要一个随机数,你总不能弄一个没有初始化的局部变量吧?你就能确定这个没有初始化的局部变量一定是随机的?
参考 /dev/random
http://www.what21.com/u/10007/9089274064966658452.htm
理论上来说,我们存在的这个世界是不存在随机的,量子的运动也是有规律的
我们完全可以逆向出任意一个随机数,当然我们人类目前的算力还无法做到这一点
那么,你说这个随机数是真正的随机数,还是伪随机数?
理论上可以逆向出这个随机数来,但是我们人类目前的算力无法做到这一点
你如何定义这个随机数?
“你无法预测它是不是随机”
其实这么说并不准确,应该说成是
你现在无法预测它是不是随机
未来可就不一定了
页:
[1]