我試過這個Armstrong程式,但發現自己被這個空陣列的事情纏住了。這個程式的作業已經困擾了我一段時間,但似乎仍然無法弄清楚這里有什么問題。是的,所以我想問一下,一個空的或不完整的陣列的元素會被分配到什么值?是NULL字符嗎,即''?我試著在網上的C語言編譯器上檢查了一下,這個斷言似乎是真的,但GCC告訴我們是相反的。我試著用這種方法來解決Armstrong的問題,下面是我的代碼:
我知道這個問題還有其他方法,但我要找的是上述問題的答案。
uj5u.com熱心網友回復:
該陣列中的值將會是未定義的。它們可能是零,也可能是堆疊的那一部分最后被使用時發生的任何值。同樣的原則也適用于堆記憶體。
uj5u.com熱心網友回復:
所以我想問一下,一個空的或不完整的陣列的元素會被分配到什么值?是不是NULL字符,即''?
不,當像你在這里做的那樣在一個函式的主體中宣告時(即沒有初始化器),內容是未定義的。在實踐中,這些值將是最后出現在堆疊中這些位置的任何隨機資料。當一個 "自動 "陣列像你在這里做的那樣被宣告時,編譯器只是插入一個堆疊增量來保留空間,但不做其他事情。它可能是零,但可能不是。
uj5u.com熱心網友回復:
你在區塊范圍內宣告了一個陣列,沒有存盤指定符static
int sto[20] 。
這樣的陣列有自動存盤期限。也就是說,在退出定義它的區塊后,它將不會再存活。
如果你在檔案范圍內宣告陣列,例如在函式main之前或在一個塊中使用存盤指定符static,它將有靜態存盤時間。
來自C標準(6.7.9初始化)
10 如果一個具有自動存盤期限的物件沒有被明確初始化 如果一個具有自動存盤期限的物件沒有被明確地初始化,它的值是不確定的。 或執行緒存盤期限的物件沒有被顯式地初始化,那么:
- 如果它有指標,它的值是不確定的。
- 如果它有指標型別,它將被初始化為一個空指標;
- 如果它有算術型別,它將被初始化為一個空指標。
- 如果它有算術型別,它將被初始化為(正數或 無符號)零;
- 如果它是一個算術型別,它被初始化為(正數或無符號)零;
- 如果它是一個聚合體,每個成員都被初始化(遞回)。 根據這些規則,任何填充都被初始化為零位;
- 如果它是一個集合體,每個成員都被初始化(遞回),并且任何填充都被初始化為零位;
- 如果它是一個聯合體,第一個命名的成員被初始化為 (遞回),并且任何填充都被初始化為零位;
- 如果它是一個聯合體,第一個被命名的成員將根據這些規則被初始化(遞回),并且任何填充都被初始化 為零位;
uj5u.com熱心網友回復:
C沒有一個結束標記,程式員應該處理它。請參考這個鏈接:C語言中陣列的結束
建議。在你的陣列中添加一個結束標記,例如,在你的陣列末端插入'x',然后回圈直到你找到這個標記。或者就像這段代碼中那樣使用一個計數器變數。
#include <stdio.h>/span>
#include <math.h>/span>
int main()
{
int num,i,cub,j;
i = cub = 0;
int sto[20] 。
scanf("%d"/span>,&num)。
j = num;
while(num != 0)
{
sto[i] = num%10;
num = num / 10;
i ;
}
int counter = 0;
while(counter < i)
{
cub = pow(sto[counter],3)。
counter ;
}
num = j;
printf(" cub: %d num: %d
",cub,num)。
if(j == cub)
printf("The number is an Armstrong number")。
else
printf("該數字不是一個阿姆斯特朗數字")。
return 0;
我希望這能回答你的問題。
uj5u.com熱心網友回復:
sto的初始值是不確定的--它們幾乎可以是任何東西,而且每次你運行該代碼時它們都可能是不同的。
如果你想確保所有的元素包含一個特定的值,你可以:
- 顯式地初始化所有 20 個元素;
- 顯式地初始化所有 20 個元素。
- 顯式初始化一些元素,其余的隱式初始化為 0; 。
- 用
static關鍵字宣告陣列,隱式地將所有元素初始化為0(盡管這改變了陣列的分配和存盤方式);
如果你想讓所有的元素最初都是0,你可以做以下的一個動作:
int sto[20] = {0}; //明確地將第一個元素初始化為0,隱式地。
//將其余元素初始化為0。
static int sto[20]; //隱式將所有元素初始化為0,*但*。
///改變了stood的存盤方式。
如果你希望所有的元素被初始化為0以外的東西,那么你就需要明確地初始化所有的元素:
int sto[20] = {-1, -1, -1, -1, -1, . .. };
或者使用一個回圈:
for ( size_t i = 0; i < 20; i )
sto[i] = -1; //或任何初始值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/306961.html
標籤:
下一篇:試圖從gridview控制元件中獲取資料,但得到"methodnameexpected"編譯錯誤,是我的代碼結構不正確嗎?
