關於C 指標的問題,C 中關於指標的一些問題

2022-03-03 02:47:20 字數 5386 閱讀 9646

1樓:

是你想多了

指標實際上也是乙個變數, 也佔用記憶體, 你用&取指標變數的位址, 沒問題, 它並不會給 "&指標變數" 這個東西分配記憶體, 只是把指標變數的位址值給你而已.

這樣想吧, 指標實際上也是乙個變數, 只不過它的值是乙個位址, 不是乙個整型, 字元型....

但是,但是,但是(重要的事說三遍) 指標變數指向的位址是有具體型別的, 比如整型, 字元, 字串, 甚至結構體, 類例項, 都可以

所以才有int * ,char * ,cwnd* ,指向指標的指標 等等

喝了點酒, 話太多了, sorry

再補充一下, 指標定義時也可以不具體指向某一種型別: void* p;

2樓:匿名使用者

這不是遞迴,你要清楚乙個指標變數:

指標變數內容:這個記憶體儲存任何型別的指標值,資料型別跟宣告的型別關聯通過*來獲取指標的內容,不會出現無限指下去的情況的比如int a;

int *p1 = &a;

//**p3 == *p1 == a;

c++中關於指標的一些問題

3樓:七寸煙火

你理解的有問題哦親,這輸出的不是位址哦,animal是乙個變數,他擁有乙個基址,用cout << &animal << endl;輸出,你這輸出的是animal[1]之後的內容哦,也就是o之後的,另外樓下的回答輸出的也是animal的位址而已,因為他們屬於乙個變數,另外位址是0x...(零x),二進位制是零x不是ox(歐x)哦

4樓:匿名使用者

因為c++標準庫中i/o類對《操作符過載,在遇到char指標時會將其當作字串來處理,所以會輸出"ox",如果想輸出位址,可以將其轉換成void指標或是使用printf。

cout << (void*)&animal[1] << endl;

printf("%p\n", &animal[1]);

關於c++指標的問題,分別代表什麼?

5樓:

第一第二個一樣,第三個不完整如 int (*p)[3]表示指向3元素的一維陣列

int (*p)()表示指向無參函式指標,最後乙個應該是強制型別轉換轉成int*這種型別希望回答能幫到你,**不清楚再問。

6樓:超級da玩家

int *p;語句、int* p;語句和int (*p);語句含義相同:宣告乙個指標p,該指標指向int型別的變數;(注意:*號,指標宣告符)

在int(*p)作為表示式時(如int m = int (*p);):將指標p指向的變數強制型別轉換為int型別(其中,*p表示:對指標p解引用,也就是取指標p所指向的變數;int()表示:

將括號內的變數強制轉換為int型別);(注意:*號,解引用符)

(int*)str表示式:將變數str強制型別轉換為int*型別的指標型別;(注意:*號,解引用符)

備註:int(*p)表示式是c++的寫法,(int)(*p)表示式是c語言的寫法,這兩種寫法在c++中是等價的。

int main()

7樓:放縱思想

前三種一樣的意思,不一樣的寫法。

#include

void main()

關於c++指標的問題

8樓:匿名使用者

程式的功能

形成乙個十元素陣列,陣列內的元素不能被其它元素整除。(說白了就是求前十個素數)

#define max 10

void main()

while (r&&i

if (r) // 條件為0時為假,

*pw++=i; //給下乙個元素賦值

n++; //n值變化範圍:2,3,4,5,6,7,8,9,10

}i+=2; // i=7; i=9 i=11 ………………

} while (n

j=0;

pr=primes;//為什麼再次把陣列的首位址賦給了pr? 見答案c.

for (i=0;i

形成乙個十元素陣列,陣列內的元素不能被其它元素整除。(說白了就是求前十個素數)

pw的能功是加入乙個新的數到陣列。pr的功能是次訪問陣列內的每乙個數

答案a:為什麼要定義兩個指標.

因為,乙個指標用於修改陣列資料,乙個指標用於遍歷陣列兩指標許可權不一樣.在下面程式中,凡是涉級修改的都是用的pw.檢視的都用的是pr. (這也是程式設計的思想)

還有,不能替換,兩個指標,在同一時刻所用處於的位置是不一樣的。 。如果,替換了會很麻煩。就像你編寫冒泡演算法一樣,兩個資料指標位置是不一樣的。

答案b:答案a提到過。每一次外部迴圈完成,都要對比下乙個即將加入陣列的數,是否能整除陣列裡的數,如果不把指標重置,指標沒有法訪問指標之前的數。

,則沒有法對比。。,pr指標重置。。,pr指標用於內層迴圈遍歷資料。

它要依次訪問陣列內的每乙個數。

判讀是否加入陣列。

答案c:因為,在接下來的程式還會用到,pr來遍歷陣列。。如果不重置,則指標沒有法訪問指標之前的數。

題外話,5樓的同志,你不要亂教哦。。

primes[max];//正常情況下,此處是:primes=

修改下哈。。

primes=(二進位制)

如果陣列定義了, 未被使用的元素,預設為全1(二進位制)

由於,計算機中,二進位製數第一位為,符號位,所以,示被定義的元素位為,乙個無窮小的數。

有多小,得看你計算機是多少位了。 。

再談談你這個數所導置的後果,0在計算機中,被認為是,假,非0則為真。。

你這樣認為,直接導致了後面的if語句,可能誤判。。。。。後果,。。。

不用謝我哈。

9樓:

void main()

while (r&&i

if (r)

i+=2;

} while (n

j=0;

pr=primes;//同上,pr重新指向陣列首位址,這樣才能遍歷輸出啊

for (i=0;i

10樓:

//計算並輸出前10個素數

#include

#include

using namespace std;//使用命名空間std#define max 10//巨集定義,編譯器遇到max替換成10void main()

while (r&&i

if (r)

i+=2;//偶數除了2,不可能是素數,所以i遞增2,判斷i是否為素數

} while (n

j=0;

pr=primes;//為了輸出所有素數,又重新指向陣列的開頭for (i=0;i

11樓:匿名使用者

#include

#include

using namespace std;

#define max 10

void main()

while (r&&i

if (r)

i+=2;

} while (n

j=0;

pr=primes;//為什麼再次把陣列的首位址賦給了pr? 這個時候的primes中的值是修改後的素數值了。賦值為了顯示出來。

for (i=0;i

12樓:

陣列首位址複製主要是用來儲存 然後位址++就挨邊輸出了!

*pw++=2;*pw++=3;這個是把2和3挨邊複製給pw指標指向的位址空間

你要看清是有++的

13樓:

void main()

int *pw,*pr;//為什麼要定義這兩個指標?這兩個指標在下面程式中都指向了陣列首位址 那麼乾脆就把所有pw,pr都替換成陣列首位址不就行了?可是替換後又不能得出結果。

為什麼?//為了指標的靈活切換,比如第乙個do迴圈裡面多次:pr=primes,實際上,兩個指標都在不停地移動

long q;

pw=primes;//為什麼把陣列的首位址賦給了pw?

n=2;

*pw++=2;*pw++=3;//為什麼pw的值同時賦給了兩個整數?

//此後:primes=,pw指向了*0處i=5;

do while (r&&i0 並且 i 0i+=2;

} while (n

pr=primes;//為什麼再次把陣列的首位址賦給了pr?此處是為了從頭遍歷此陣列

for (i=0;i

14樓:匿名使用者

1st預處理中定義了#include

#include

using namespace std;

#define max 10

意思是我會使用cin&&cout

和在後面程式裡吧所有max換成10

2主程式main被定義成了void(無值)3int i,j,n,p,r,primes[max];

這意思是吧i j n p r定義成整數型

primes是乙個擁有max個元素的陣列,max就是10(好像是字元10)

4樓主注意關鍵的來了::

為什麼把陣列的首位址賦給了pw?

解:原式=pw是以位址奇偶好像一空屋子,把數柱狀了竟來,一豬衝進豬圈有為省麼嗎?

p=*pr++;

q=i/p;

r=i-q*p;

這的意思是 長整形p=*pr(好怪是&,【此時pr就是那陣列】)還有為什麼要定義這兩個指標?這兩個指標在下面程式中都指向了陣列首位址 那麼乾脆就把所有pw,pr都替換成陣列首位址不就行了?可是替換後又不能得出結果。

為什麼?

解:你想陣列是以整體,向中國不可分割你用陣列好現在讓骨肉分離為什麼pw的值同時賦給了兩個整數?

*pw++=2

這意思是pw=pw+2

吧pw+2得值付給了pw

就是pw+2

後面那個同理

為什麼再次把陣列的首位址賦給了pr?

問得好迴圈之後值都變了你說呢

其餘都是冢中枯骨

相信你也有功底

自己理解

不過樓主我還是感覺這程式好怪

還有別嫌我話多

衛生麼你不用for()函式

c語言關於指標的求解,C語言中關於指標的指標問題?

int x 10 p1 a x 3 x 3 3 陣列從0開始,3其實是第四個 b p1 x 3,p1 先執行p1 x 3,也就是指向x 3 因為p1定義成指標。p1 這時候先執行再加,這表示式仍然是3 c p1 x 2,p1 p x 2 x陣列的位址加2,也就是指向x 2 x 2,這時候p 同時也是...

C 指標的問題,C語言指標問題

這麼說吧,指標是以後資料結構的基礎,比如單鏈表,雙鏈表,二叉樹等等等等,全部都時指標做的,還有1720次對於現在的計算機來說,是個很小很小很小的數量級。指標學好了受益匪淺,並且也是程式設計今後必須的。指標的確是可以大大提高效率,但是要看你怎麼用,就和遞迴演算法一樣,另外,顯示位址是你語句的問題。比如...

c 指標問題

p p 你要看下 跟 哪個運算級高。p 的意思是 指標指導到後乙個元素 p 的意思是當前元素裡面的數值增加1 舉例int a int p a p 操作的結果是 a依舊2,1 p 為1 p 的結果的是 a 為3,1 p 為3 例如 char a a,b,c,d char p a p 表示,指標指向的位...