可以通過未賦值的變數產生隨機數嗎?

就像int i;return i醬紫


不能


不能

實際應用中,對隨機數有很多很多要求。

比如能否取到值域內的每個值、滿足什麼樣的分布、產生的序列是否有某種規律性等等。

至於你這種方法,多次調用時,能得到的隨機信息可能還不到一個二進位位(其實哪怕app啟動後僅調用一次,隨機性都屬於呵呵級……)。


不可以,這個返回的棧內的一個數據,這個數據是之前的函數調用時候使用過的,很大程度上是完全可控的,如果你用一個循環去調用這個方法,它永遠都會返回同一個值。如果你在每次調用這個方法前都調用另一個函數,也很可能遇到每次都返回同一個值的現象。即使改用new或者malloc去獲取堆空間中的內存,大部分時候獲取到的值仍然是不變或者很少變化的。未初始化的內存並不是隨機的數,而只是保存內存之前的狀態,如果沒有人在這個位置上寫上別的值自然是不會有隨機的效果的。

某一些被外部設備使用的內存因為頻繁被讀寫(比如說設備時鐘或者計數器之類)可以作為一個隨機性的來源,但是因為不符合均勻分布的要求,一般只能用來產生隨機數種子。Linux的/dev/urandom好像就用了這種方法。這些內存一般都在內核空間中,無法直接從用戶空間訪問。


感覺像是專門留下作弊的後門。。。


也就 C 這种放任自流的語言能讓你這麼干,你換個稍微嚴格一點的語言,編譯器肯定要狠狠地踢你的屁股。


不能,不是隨機值,是垃圾值。


不夠隨機


不可以。未賦值的變數的值並不是隨機的,而是給他分配的那塊內存的值是多少。如果你一直調用這個函數不幹其他事情,那麼你最後這個本地變數在stack上的位置也會是差不多的。最後你得到的數估計都差不多


推薦閱讀:

TAG:計算機科學 | 隨機數 |