① c語言 關於空指針問題
1. if(y == NULL && w == NULL && d == NULL)這個語法上是對的,但是邏輯上不對,應該任何變數為空指針都不能執行,所以改為if(y == NULL || w == NULL || d == NULL)
2. if...else... 的用法問題,else後並不是一定要再加if的。而且if後面一定要有條件。
3. 循環只要是收斂的就可以用,但是要記得初始化
a=a初值;
b=b初值;
epsilon =較小值;
for(c = abs(a-b); c<epsilon ; c = abs(a-b);){
a = (a+b)/2;
b = sqrt(a*b);
}
4. 要修改y,w,d所指向的值,所以要用指針。否則直接用int y,w,d的話只能修改函數內部變數,不能帶出函數。(形參和實參的概念)
程序修改如下:
int convertTime(int days, int *y, int *w, int *d){
if(days < 0){
return 1;
}
else if(y == NULL || w == NULL || d == NULL){//去掉多餘的if,並修改&&為||
return 1;
}
else{//去掉多餘的if
int a = days%365;
*y = days / 365; //可以直接這么寫,由於分子分母都是整數,所以這里的除號是做整除
*w = a / 7;
*d = a % 7;
return 0;
}
}
② c語言,空指針,野指針,通用指針
空指針:空指針是一個特殊的指針值,也是唯一一個對任何指針類型都合法的指針值。指針變數具有空指針值,表示它當時處於閑置狀態,沒有指向有意義的東西。
通用指針:通用指針,它可以指向任何類型的變數。通用指針的類型用(void *)表示,因此也稱為void 指針。
野指針:野指針也就是指向不可用內存區域的指針。通常對這種指針進行操作的話,將會使程序發生不可預知的錯誤。
空指針是一個特殊的指針值,也是唯一一個對任何指針類型都合法的指針值。指針變數具有空指針值,表示它當時處於閑置狀態,沒有指向有意義的東西。空指針用0表示,C語言保證這個值不會是任何對象的地址。給指針值賦零則使它不再指向任何有意義的東西。為了提高程序的可讀性,標准庫定義了一個與0等價的符號常量NULL. 程序里可以寫 p = 0; 或者 p = NULL; 兩種寫法都把p置為空指針值。相對而言,前一種寫法更容易使讀程序的人意識到這里是一個指針賦值。我們印象中C語言的指針都有類型,實際上也存在一種例外。
這里涉及到通用指針,它可以指向任何類型的變數。通用指針的類型用(void *)表示,因此也稱為void 指針。
野指針,也就是指向不可用內存區域的指針。通常對這種指針進行操作的話,將會使程序發生不可預知的錯誤。
「野指針」不是NULL指針,是指向「垃圾」內存的指針。人們一般不會錯用NULL指針,因為用if語句很容易判斷。但是「野指針」是很危險的,if語句對它不起作用。野指針的成因主要有兩種:
①指針變數沒有被初始化。任何指針變數剛被創建時不會自動成為NULL指針,它的預設值是隨機的,它會亂指一氣。所以,指針變數在創建的同時應當被初始化,要麼將指針設置為NULL,要麼讓它指向合法的內存。
②指針p被free或者delete之後,沒有置為NULL,讓人誤以為p是個合法的指針。別看free和delete的名字惡狠狠的(尤其是delete),它們只是把指針所指的內存給釋放掉,但並沒有把指針本身幹掉。通常會用語句if (p != NULL)進行防錯處理。很遺憾,此時if語句起不到防錯作用,因為即便p不是NULL指針,它也不指向合法的內存塊。
③ c語言中,空指針申請了內存但未賦值,它還是空指針么
這里的表達很不清楚。
申請內存時實際就是從內(的堆)中,指定沒有使用的一塊區域來存儲某個數據,區域的大小也就是位元組數在申請時已經傳遞給了內存申請函數,返回的指針就是這個區域的首地址。返回的指針賦值給某個變數,以後就可以通過這個指針變數來使用(存儲或者是讀取)所分配的這一塊內存區域了。
所以就不清楚問題中說的空指針申請了內存所表達的意思。
如果還有問題,請繼續追問。
④ C語言 空指針
int *p;p=&a空指針也分配了空間它裡面是隨機的碼,我認為int *p和int*p=null是一樣的。p=n就是p和n都指向了一個n內的隨機數。
⑤ C語言中的空指針是什麼意思
空指針是就是一個被賦值為0的指針。
對於空指針值,一般的文檔中傾向於用 NULL 表示,而沒有直接說成 0。但是我們應該清楚:對於指針類型來說,返回 NULL 和 返回 0 是完全等價的,因為 NULL 和 0 都表示 null pointer(空指針)。
(5)c語言空指針未賦值的判斷擴展閱讀
如果一個 空指針常量 賦給了一個有類型的指針變數,那麼這個指針就叫空指針。它不指向任何的對象或者函數。
例如:如果 p 是一個指針變數。
若進行: p = 0;、p = 0L;、p = '