關於c 指標的含義,C 指標定義

2022-03-25 19:26:29 字數 5561 閱讀 5603

1樓:

在c++中,定義指標變數如你上面所述可以寫成 int *a1。

此時的a1為一個指標變數,其中可以存放一個int型別的變數的地址,也即所謂的a1即指向對應變數的指標。但是,定義以外的地方,例如程式中用到a1時寫成你上面寫的那個樣子*a1 ,其表示取a1所指向的地址中存放的內容;也就是說定義int *a1,此時a1本身就是一個指標了。後面如果用其指標直接用a1,如果要取a1所指向的地址中的內容,要用*a1;

後面的a1 = 3這樣賦值是不對的,因為對於指標變數是不可以使用常數對其賦值的;

當然,雖然*a1相當於一個變數,但是如果給*a1賦值,如你上面的形式還是有問題的(雖然編譯環境可能不提示);因為這裡你只是定義了一個整型變數的指標,還沒有對其賦值(沒有讓其指向已經存在的變數的地址),也就是說a1到底指向那一個地址還不一定,是隨機的。這時改變其指向的地址中內容,就好像一個定時炸彈,可能會改變系統某個引數從而報錯,當然也可能指向一般的空間而不報錯誤;

可以這樣:

int *a1 = new int;

*a1 = 3;

相當於定義了一個int型指標,並且讓其指向新分配的int型的記憶體地址;然後將3值賦值給對應的已分配的地址中;

這樣解釋是不是說明白了呢?呵呵,希望對你有幫助!!

2樓:龔煒林

int *a1,a1=3;這樣不對的,因為a1是指標,是一個地址,其次這是一句(一個;),這句是定義,你同時定義一個名稱的變數,不行。可以改為int a1=3;

3樓:匿名使用者

指標沒有分配記憶體空間是不能用立即數對其賦值的

你可以這樣初始化為3

int* a1 = new int(3);

4樓:lizhen振

a1是變數

*a1是指標即地址

5樓:

需要明確的是,你用了兩個a1,命名衝突,你先命名了一個a1指標,又命名了一個a1變數,直接不允許。

首先是個不允許的情況,這個前提下你討論他到底是什麼,沒意義。

如果你把改成int *a1,a2 = 3;後邊的問題我就可以回答了

a1是一個地址,*a1是一個變數,但是*a1 = 3;在本例中是不允許的。不是給變數賦值這麼簡單。

因為你的a1沒有初始化,只是宣告瞭一下,如果你加一句a1 = &a2;情況就不同了,a1有定義了,是指向a2的指標,此時*a1是a2的值,也就是3,此時寫一句*a1 = 33;這就相當於把a2改成33了,要注意a1和a2是兩個層次,a1存放a2的地址,*a1的數值和a2一樣。

如果你想直接int *a1 = 3;這也是錯的,在此句中int * 說明a1是指標型別,但是賦值語句中他是作為a1存在的,不是*a1,這是很重要的基礎。記住,此句的分解是:(int *) a1 = 3;因此,

a1需要的是一個地址,3是一個數值,這不同於a1 = 3,a1 = 3的大概意思是讓a1強行指向記憶體地址3(先不討論可行性),而int *a1; *a1 = 3;主要是3是一個常量表示式,是一個右值rvalue,如果指標是看門的管理員,右值你就當他是個臨時的房客,臨時的房客是沒有房間號的,有可能進旅店逛一圈連房都沒開就走了(其實,在休息室待了一下),他不可靠。你需要找一個穩定住戶a2,來獲取相關地址,因為a2宣告過了,開過房了

c++中的指標是什麼意思?有什麼作用啊?

6樓:匿名使用者

這樣一看才知道大家對空指標的概念如此渾濁哦!!

首先:void* 這不叫空指標,這叫無確切型別指標.這個指標指向一塊記憶體,卻沒有告訴程式該用何種方式來解釋這片記憶體.

所以這種型別的指標不能直接進行取內容的操作.必須先轉成別的型別的指標才可以把內容解釋出來.

還有'\0',這也不是空指標所指的內容. '\0'是表示一個字串的結尾而已,並不是null的意思.

真正的空指標是說,這個指標沒有指向一塊有意義的記憶體,比如說:

char* k;

這裡這個k就叫空指標.我們並未讓它指向任意地點.

又或者char* k = null;

這裡這個k也叫空指標,因為它指向null 也就是0,注意是整數0,不是'\0'

一個空指標我們也無法對它進行取內容操作.

空指標只有在真正指向了一塊有意義的記憶體後,我們才能對它取內容.也就是說要這樣

k = "hello world!";

這時k就不是空指標了.

7樓:匿名使用者

找一本c語言關於指標的書,好好看看,就知道。

c++指標定義

8樓:匿名使用者

為了說清楚什麼是指標,必須弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。

如果在程式中定義了一個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中定義的變數型別,分配一定長度的空間。例如,c++編譯系統一般為整型變數分配4個位元組,為單精度浮點型變數分配4個位元組,為字元型變數分配1個位元組。

記憶體區的每一個位元組有一個編號,這圖中就是「地址」。

請務必弄清楚一個記憶體單元的地址與記憶體單元的內容這兩個概念的區別。在程式中一般是通過變數名來對記憶體單元進行存取操作的。其實程式經過編譯以後已經將變數名轉換為變數的地址,對變數值的存取都是通過地址進行的。

這種按變數地址存取變數值的方式稱為直接存取方式,或直接訪問方式。

還可以採用另一種稱為間接存取(間接訪問)的方式。可以在程式中定義這樣一種特殊的變數,它是專門用來存放地址的。

圖6.2是直接訪問和間接訪問的示意圖。為了將數值3送到變數中,可以有兩種方法:

直接將數3送到整型變數i所標識的單元中。見圖6.2(a)。

將3送到指標變數i_pointer所指向的單元(這就是變數i所標識的單元)中。見圖(b)。

所謂指向,就是通過地址來體現的。

由於通過地址能找到所需的變數單元,因此可以說,地址指向該變數單元。因此將地址形象化地稱為「指標」,一個變數的地址稱為該變數的指標。

9樓:匿名使用者

int n = 10;

int *p = &n; //不管是c還是c++這句都是對的

int *p = n; //不管是c還是c++這句都是錯的!!!型別不匹配

在不同的地方*表示的含意是有區別的。

當*出現在型別定義時(型別之後的地方),如int *p;那這是告訴編譯器變數p的型別為int型別的指標(int*),所以你還可以這樣寫int* p;或int * p;都是可以的。

而直接出現在變數後(不是定義時),就表示解引用.

int *p;

p = &n;

是先定義p為一個int型的指標,然後讓p等於(指向)整型n的地址

而int *p = &n; 變數p實際上是在定義的同時賦了初值,因此這裡p前面的*是要和型別(也就是int)合起來看,表示p是一個int型的指標!此時,千萬不要把*和p一起來看!

所以int* p; //我有意把*寫得和int靠攏一些:),強調int*是一種型別

p = &n;

和int* p = &n;

是一回事

就好比:

int i;

i = n;

和int i = n;

是一回事

而*p = *p + 6;中p前面的*就是解引用符了

不要把概念搞混了啊,呵呵!

10樓:匿名使用者

你那個n是一種型別的物件,不是指標

而指標天生就是用來儲存地址的,

所以int *p = n是不合法的

11樓:匿名使用者

樓主只要記得把初始化和賦值分開就行了,沒有那麼複雜的。如果是在初始化,即int *p = ...中就應該跟一個int *。你不要把它認為是賦值,而是設定p的初值。

不過c++確實在這裡很彆扭。事實上引用型宣告更彆扭,但是好象除了用其它特殊字元也沒有更好的辦法。:)

12樓:小玉是我老婆

為什麼?

不知道....

兩種形式而已.

一個是先定義指標再賦值,另一個是在定義指標的時候就初始化了.

c++的指標是什麼意思

13樓:

指標,非常重要,去看書吧,這裡先簡單說一下。

執行資料在記憶體裡儲存著,每一位元組資料都有一個序列號,叫做地址,指標就是存這些地址的。指標的操作就是地址的操作,通過地址來訪問、處理資料要比順序處理要好得多。

注:試想如果你可以在記憶體中自由穿梭,你可以做多少事。。。

14樓:go陌小潔

‍指標就像是其它變數一樣,所不同的是一般的變數包含的是實際的真實的資料,而指標只是一個指示器,它告訴程式在記憶體的哪塊區域可以找到資料。

指標是一個資料型別,本身也需要佔用四個位元組的儲存空間。所以用sizeof(void*)獲得的值為4。

定義指標:

看如下的例子:

int *pnumber;

這樣就定義了int型別的指標。

指標變數名稱以p為首字元,這是程式設計師通常在定義指標時的一個習慣,以提高便程式的閱讀性,表示這是個指標。另外,雖然int* pnumber和int *pnumber是相同的,但是使用後一種的程式設計風格更好一些。

比如:int *pnumber1,*pnumber2;

表示定義兩個指標,*號和變數靠近;反之,我們可能會定義成int* pnumber1,pnumber2,這將是一個錯誤的定義,pnumber2就不是指標了。

15樓:匿名使用者

很重要,很多地方都要用到的,還是好好學下指標

網上指標的學習資料一搜一大堆

16樓:匿名使用者

就一句話,不懂c++指標,你的c++將會一無是處

c++中的指標有什麼作用?

17樓:願奉綿薄

指標的功能強大,它可以指向資料存放的地址,指標既可以指向變數地址,也可以指向函式。因此,無論是呼叫資料,還是呼叫函式,都可已使用指標。指標實現間接訪問,可以保證原資料不會丟失。

18樓:

我覺得不管別人問的什麼問題,多麼初級,多麼簡單,能回答還是詳細回答,或者告訴他怎麼找幫助,在那裡可以找到,別冷嘲熱諷的,大家都是這樣過來的

19樓:匿名使用者

幫你解決記憶體問題,,, 在c裡面指標是非常重要的,在c++裡面雖然有& 但指標還是非常重要的。

20樓:

c++的指標作用和c的完全一樣,簡括說就是記憶體操作。

其有點如下:

1、效率更高,不用通過變數名,直接操作記憶體(取值賦值等),這樣效率大大的高

2、可以寫複雜度更高的資料結構,這個也好理解,程式設計師可以操作記憶體,當然可以寫出靈活、複雜的資料結構

3、編寫出簡潔、緊湊、高效的程式

c++中的指標問題,指標的使用帶來什麼意義?

21樓:

在某些採用值傳遞的方式,被調函式對形參的修改不會返回到主調函式,不會修改實參的值.引用指標實現"引用傳遞",減少傳遞引數的開銷,還可以直接對地址操作.實現動態儲存管理.

C和C 指標的指標是什麼型別,C 指標與C指標有什麼區別?

多美的新一天 1 指標的指標,是個記錄單重 一個 指標變數首地址的指標變數 2 與計算機位數有關 16位計算機,2byte 32位,4b 64位,8b 3 象char p1 int p2 將p2賦值給p1,不允許,也沒意義 扈懷煒 指標的指標還是指標型別,他是指向一個指標的儲存空間的。比如 int ...

關於c指標的題,C語言關於指標的一道題。

漫遊靜心 1 定義一個int型二維陣列,會在記憶體中分配一段連續的空間,存放這些數。按照你的定義,是8個數,一個int型是4個位元組,所以你定義的陣列一共佔用了32個位元組,這32個位元組的首地址為 0x0064fd38。2 陣列名是這32位元組的首地址,是一個指標,但是可以理解為被const修飾的...

C類中定義的指標的問題

為什麼編譯的時候總是報錯 null is undeclared identifier 樓主tdxue ilanlan 2003 06 12 10 54 53 在 c c c語言 提問 我在vc下的.cpp檔案中定義了一個類 class point 但是編譯的時候報錯 error c2065 null...