當前位置:首頁 » 編程語言 » c語言空指針未賦值的判斷
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言空指針未賦值的判斷

發布時間: 2022-05-05 20:17:26

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 = '';、p = 3 - 3;、p = 0 * 17; 中的任何一種賦值操作之後(對於 C 來說還可以是 p = (void*)0;)。

p 都成為一個空指針,並且由系統保證空指針不指向任何實際的對象或者函數。 反過來說,任何對象或者函數的地址都不可能是空指針。

指針作為實體,是一個用來保存一個內存地址的計算機語言中的變數。指針一般出現在比較底層的程序設計語言中,如C語言。高層的語言如Java一般避免用指針,而是引用。

指針作為數據類型,可以從一個函數類型、一個對象類型或者一個不完備類型中導出。從中導出的數據類型稱之為被引用類型(referenced type)。指針類型描述了一種對象,其值為對被引用類型的實體的引用。

參考資料來源:網路-空指針常量

⑥ 在C語言中,創建一個指針變數,但是不賦值,是否就是空指針

對於未初始化的變數,編譯器會給它們一個默認值,這個默認值是未知的(也許是NULL,也許是其他的),任何使用未初始化的變數的行為都是有隱患的。

⑦ C語言空指針是怎麼回事

空指針指的就是NULL
也就是0指針
指針的含義 是一個地址。 而0地址是非法地址。對這個地址進行賦值 或者取值 就會出現空指針錯誤

在實際編程中,經常把指針初始化為空指針, 在訪問的時候進行判斷, 如果為空,那麼就是還沒有正確賦值的, 應該避免訪問。

⑧ c語言 出現空指針賦值怎麼回事請高手幫忙看下。

是編譯器報的空指針賦值吧?主要原因:作者沒有搞清楚C中的全局變數和局部變數的問題。
1。zts[35];point1[35];point2[35];x1[35]這四個數組在main()中有,在四個子函數中有,各是各的,互不幹涉,所以main()中的這四個數組始終沒有被賦值過,空指針指的就是這個吧。
2。應該把這四個數組的首地址作為四個read()的參數傳過去,就可以實現:「在子函數中賦值,在main函數中使用」 的設計目的了。看程序,感覺作者就是這個目的吧。
3。 魔尊8 說的有一定道理,這四個read確實沒有起到應有的作用。加上數組首地址做參數就可以了。或者把這四個數組做成全局變數也行啊。
4。作者有時間的話還是應該好好看看C語言的書啊。