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

c語言間接引用空指針

發布時間: 2023-03-14 03:05:59

c語言 什麼是間接引用(indirection)

間接引用,通俗的講就是使用指針的指針
如:
int a;//定義整型變數,為其分配內存空間,假設為0xaaaaaaa

int *p;//定義指針,分配內存空間,假設為0xbbbbbbb

p=&a;//指針變數名p表示的是指針變數本身的值,而不是其地址
所以,這個語句執行後,p本身所在的內存地址不變,而是裡面的數據改變了。p=0xaaaaaaa,也就是地址0xbbbbbbb里的數據變成0xaaaaaaa

*p=5;//直接引用,往p,也就是地址0xaaaaaaa 寫入數據5。

int **pp;//定義指針的指針,分配內存空間,假設為0xcccccccc
pp=&p;//,0xcccccccc這個內存地址里的數據是p的地址,也就是0xbbbbbbbb

**pp=5;//間接引用,我們通過pp的地址0xcccccccc,取得裡面的數據0xbbbbbbbb,再通過這個數據0xbbbbbbbb,知道a的地址,往裡寫入數據,給a賦值5

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

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

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

❸ 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語言中對指針變數的直接和間接引用怎麼區別

引用相比於於指針各有優點:一、引用變數它不能改變自身所引用的地址空間,而指針變數可以,那麼就很可能出現一些因為不小心的修改而導致錯誤的結果。二、在作為函數參數方面,引用作為參數,你調用的時候不需要對變數取地址值,這樣看起來比較直觀,而且方便,如果是指針變數作為參數,那麼你有時候會不明白這個函數到底是對指針進行運算,還是對指針指向的變數空間進行運算,而且還要取地址操作。三、不過有時候指針還是比引用好用的多,不如你需要快捷修改指向位置,那麼指針是很快的,有時候你就是要對地址(就是直接對內存)操作,那麼指針是首選啦。 下面是一個例子希望對你有用: //PointAndRef.cpp#include<iostream.h> //cout<< void pointFun(int *a,int *b) //指針作為參數{
int temp;
temp=*a;
*a = *b;
*b=temp;
}void refFun(int &a,int &b) //引用作為參數
{
int temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int a,b;
a=1,b=2;
pointFun(&a,&b); //指針調用需要取地址值。
cout<<"a="<<a<<"b="<<b<<endl;
int c,d;
c=3,d=4;
refFun(c,d); //引用調用和正常變數調用一樣。
cout<<"c="<<c<<"d="<<d<<endl;
}

❺ C語言中,空指針的使用意義是什麼在編程中使用空指針會帶來什麼影響

  • 語言定義中說明,每一種指針類型都有一個特殊值——「空指針」——它與同類型的其它所有指針值都不相同,它「與任何對象或函數的指針值都不相等」;

  • 不要返回指向棧內存的指針或引用,因為棧內存在函數結束時會被釋放。

  • 指針是個很強大的工具,可是正因為它太強大,所以要操作它不是件易事。操作不當造成的野指針,甚至會引起系統死機等比較嚴重的後果。

    如果程序定義了一個指針,就必須要立即讓它指向一個我們設定的空間或者把它設為NULL,如果沒有這么做,那麼這個指針里的內容是不可預知的,即不知道它指向內存中的哪個空間(即野指針),它有可能指向的是一個空白的內存區域,可能指向的是已經受保護的區域,甚至可能指向系統的關鍵內存,如果是那樣就糟了,也許我們後面不小心對指針進行操作就有可能讓系統出現紊亂,死機了

❻ 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指針,它也不指向合法的內存塊。