-
指標、陣列名稱和引用之間的相似之處在於,它們都可以操作位址中的數值。
區別: 指標:指標變數指向乙個位址,也就是說,如果要操作乙個數值,則定義 int *p = &a; 因此,如果 a 的值為 20,則記憶體中 a 的位址為 0x1111,並且儲存在 p 中的值為 0x1111,如果輸出 p 的值,則 p=0x1111,而不是 20。
陣列名稱:是儲存在連續空間中的值,如果 int b[10],則定義 b[0] 的位址 (&b[0]) 為 0x0000,因為 int 占用 2 個位元組,則 &b[1] = 0x000f,依此類推。 操作整個陣列與操作一維指標相同。
int *p = b;(與 int *p = &b[0] 的效果相同)。
int a = 0;
fun(a);
cout “所以,a 的值是 1。 這裡 C 相當於 A 的另乙個名稱。 就像古人的名字和人物一樣,你對關羽的手術,也和你對關雲昌的手術是一樣的。 在同一位址空間中操作具有不同名稱的值。
我不知道我是否能理解這一點。
-
上面有些說得太多了,但重點沒有說;
2.陣列名稱:是常量型別的指標,與“指標”變數的主要區別;
房東連帖子都沒看,也沒結束,所以太忙了。
-
1.指標變數用於儲存資料的位址,陣列用於直接儲存資料(當然,你可能已經看到,陣列的每個元素都是乙個指標,但是一組指標也是資料,它們各自的內容都是位址)。
3.指標通常用於動態資料; 陣列通常用於固定數量和型別的資料集。
4.定義指標變數不會帶來記憶體分配,需要自己分配記憶體,並將指標變數的內容改寫到分配的位址,通常使用記憶體分配函式,如malloc; 定義陣列隱式地將記憶體分配給引數之神。
5.影響sizeof運算子的返回值,sizeof(指標)總是會返回平台指標的大小,通常32位訓練機返回4,64位返回8,而sizeof(陣列名稱),它會返回陣列的記憶體大小,這取決於陣列包含多少資料。
-
指標陣列。 與陣列指標的主要區別如下:
1. 陣列的名稱不能更改,但指向陣列的指標可以更改。 字串。
指標指向的字串中的字元不能更改,而字元陣列中的字元可以更改。 在查詢陣列的長度時,可以通過借用陣列的名稱來獲取陣列的長度,但不能通過借用指標來獲取陣列的長度。
2.陣列名稱的指標不能更改,但可以更改陣列的指標。 由於無法更改陣列名稱的點,因此使用自動增量運算子。
自動增量會改變它的指向,這是不正確的,陣列名稱只能指向陣列的開頭。
3.指標陣列是乙個陣列,陣列的元素都是指標,陣列占用的位元組數由陣列本身決定。 陣列指標是指向陣列的指標。 在 32 位系統中,它始終是 4 個位元組,它指向的陣列是多少個位元組。
4.字串指標指向的字串中的字元不能更改,而字元陣列中的字元可以更改。 指標陣列本身就是乙個陣列,但它包含它所包含的資料型別。
它不是 int,也不是像 char 這樣的基本型別,它是一種指標型別,說白了,它是乙個位址。
-
陣列名稱確實表示指向陣列第乙個位址的指標,但是這個指標很特殊,它的值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址, 如果有陣列 char a;那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。
第二個區別是,每當使用陣列名稱指標時,系統都會傳入陣列的資訊,而普通指標只是乙個 4 位元組的整數,例如:
char a[5];
char *p = a;指標 a 和指標 p 都指向陣列 a 的第乙個位址<結果為“5”。
-
為什麼陣列名稱的指標不能計算,也就是你說的不能改寫,告訴你是因為陣列一旦定義,就放在常量區域,你能試著改常數嗎?
-
.陣列和指標以區分:source。
陣列名稱確實表示指向陣列第乙個位址的 bai 指標,但這個指標很特別,它的 dao
值(指標的值是指標指向的位址)不能被覆蓋,只能覆蓋它指向的內容,換句話說,陣列名稱只能指向陣列的第乙個位址,如果有陣列字元a; 那麼如果 a = a+1; 這是乙個甚至無法編譯的錯誤。 對於普通指標,例如,可能有乙個陣列 char a; 然後定義乙個字元 *p = a; 然後使用 p = p+1 是有效的,這意味著指標 p 指向 &a[1]。
第二個區別是,每當使用陣列名稱指標時,系統都會傳入陣列的資訊,而普通指標只是乙個 4 位元組的整數,例如:
char a[5];
char *p = a;指標 a 和指標 p 都指向陣列 a 的第乙個位址。
Cout <,這次執行的結果是“5
-
指標中的資料是所需資料的位址,而陣列是將資料儲存到連續儲存中的陣列。
-
ch 是乙個陣列。 陣列的名稱也是陣列的第乙個元素的位址。 與您學習 C 語言的指標有相似之處嗎? 首先:和ch有什麼關係,str是指標,ch,是的。
-
指標和陣列之間的不滿。
許多初學者並不確切知道指標和陣列之間的關係是什麼。 我現在告訴你:他們之間什麼都沒有。
任何關係! 只是他們經常穿著相似的衣服來逗你。
指標就是指標,在32位系統中,指標變數總是會占用4個位元組,它的值是某個記憶體的位址。
指標可以指向任何位置,但不能指向可以通過此指標變數訪問它的所有位置。
陣列是乙個陣列,它的大小取決於元素的型別和數量。 定義陣列時,必須指定其元素的型別。
和數字。 陣列可以儲存任何型別的資料,但不能儲存函式。
既然它們彼此之間沒有任何關係,為什麼很多人將陣列與指標混淆呢? 甚至很多人都認為要參考。
針和陣列是一樣的。 這與市面上的C語言書籍有關,幾乎沒有書籍能徹底解釋這個問題。
指標和陣列的比較。
指標儲存資料的位址,指標變數 p 中儲存的任何資料都被視為位址。 p本身的位址是由編譯器單獨儲存的,儲存在**中,我們不知道如何間接訪問資料,所以我們先得到指標變數p的內容,用它作為位址,然後從這個位址中提取資料或者把資料寫入這個位址。 指標可以以指標*(p+i)的形式訪問; p[i] 也可以作為下標訪問。
但本質是先取p的內容,再加上i*sizeof(type)的位元組作為資料的真實位址。 動態資料結構常用的函式是 malloc 和 free。 這通常是指匿名資料(儘管它也可以指向命名資料)。
陣列儲存資料,陣列名稱 a 表示陣列第乙個元素的第乙個位址,而不是陣列的第乙個位址。 &a 是整個陣列的第乙個位址。 a本身的位址由編譯器單獨儲存在**中,我們不知道。
直接訪問資料,陣列名稱 a 是整個陣列的名稱,陣列中的每個元素都沒有名稱。 您只能以“命名 + 匿名”的方式訪問其其中乙個元素,並且無法將陣列作為乙個整體進行讀寫。 陣列可以以指標 *(a+i) 的形式訪問; 也可以遵循標記的形狀。
答[i]。 但其本質是陣列第乙個元素的第乙個位址,由 a 表示,加上 i*sizeof(型別)位元組作為資料的實際位址。 通常用於儲存相同資料型別的固定數量的元素。
隱式分配和刪除自身是陣列名稱。
-
區別:C將記憶體劃分為四個區域,並將通用變數和陣列放在記憶體的堆疊區域,因此陣列在C的定義中只是一組同型別的普通變數,即使這個變數可能是乙個指標。 所以它的作用比指標要小得多,乙個指標可以指向任何區域的任何資料,所以會感覺指標和陣列名很像,但必須注意的是,陣列名只是其中乙個指標,它是乙個只指向堆疊的指標,指標可以在有限的範圍內移動, 即陣列的長度。
而且,陣列在定義之初就已經有了自己的記憶體,如果乙個通用指標沒有指向某個記憶體塊,它就沒有自己的記憶體,也就是所謂的百搭指標。
總結:不僅陣列有指標,所有變數都有指標,指標說白了就是記憶體中的位址,就像房間必須有房間號一樣。 在 C C++ 語言中定義指標是在堆疊中開啟乙個記憶體空間來儲存它指向的記憶體位址,然後給指標賦值,即將位址值賦值給剛剛開啟的記憶體空間,然後通過訪問記憶體中的位址值間接訪問該位址下儲存的資料。
如果位址值指向靜態儲存區域,例如字串常量,則當然不能更改該點的內容。
說到體驗,建築是乙個加分項。
-
例如,您將理解:int *p ,a[5],b;
p=a;b=*p;
將指標 p 的內容指定為 b。
a 表示 a[5] 的第乙個位址,a 等價於 &a[0]。 指標就是位址。 (int *p;使用*來區分通用變數,這與以下文字中*的含義不同,注意以下文字中的*表示位址儲存的內容)。
-
陣列是連續分配一串單元格的,剛定義的時候必須固定數量,看起來很整齊,但寫的程式是死程式,容易浪費記憶體。
指標儲存乙個位址值,該值指示它指向某個單元格,並且該指標可用於索引該單元格。 陣列可用於完成堆疊、堆、樹等,它的好處在程式設計時非常靈活,在構建想法時也有很大的靈活性。
-
看看陳正衝先生對C語言的深入分析。
他們彼此之間沒有任何關係! 只是他們長得比較像,喜歡一起玩,更可恨的是,他們穿同樣的衣服,問這個問題來迷惑你! 呵呵。
-
算了,陣列似乎是受長度保護的,頭部是指標,指標是指標。 我不記得了......
你學過C語言嗎?
首先:和ch有什麼關係,str是乙個指標,ch,是乙個陣列的第乙個位址,雖然這兩個位址可以是同乙個位址,但是它的含義卻大不相同,ch不能用陣列的名稱給它賦值,定義大小後,就想想你給10個孩子糖, 你不能只給第乙個,然後其他孩子會不理你,我不是說你也明白。 >>>More
你好,我覺得你說的很有道理! 如果乙個男人挖牆腳成功,就叫有實力,在朋友面前很有面子,但相反,如果乙個女人挖牆腳,不管她成功與否,在外人眼裡,都是廉價的、不雅的、狐狸精的,這是非常不公平和荒謬的。 >>>More