指標和陣列有什麼區別,指標與陣列的區別和聯絡

時間 2022-06-04 19:50:03

1樓:匿名使用者

1全部這是說陣列的特性,如你舉例的陣列pass[64],裡面的pass單獨拿出來,他就是乙個指標,他所指向的位址是你這個陣列的首位址。

而如果你單獨申請乙個指標,這個指標是空的,什麼地方都沒有指,所以就需要去申請乙個記憶體空間給他,c方法是pass = (char *)malloc(sizeof(char)*64);

c++方法是pass=new char[64];

記得給好評哦親

2樓:匿名使用者

你的指標內位址是空的,需要malloc一段buffer,然後把位址儲存在這個指標裡面,才能去使用這個buffer.否則你沒有記憶體來儲存你輸入的引數。

pass[64] ,是已經分配好了一段64個位元組的buffer的,所以可以用。

陣列分配的buffer [64]是在棧上分配的,malloc分配的buffer是在堆上

3樓:小羊裝狼

你沒初始化 指標是指向記憶體的位址

你char *pass=null 沒分配記憶體 pass指向啥?

pass[64] 就分配好記憶體了

其實陣列名就指向陣列的首位址 比如passchar *pass=(char *)malloc(sizeof(char)*64);你也可以這樣寫

看一下malloc函式吧

4樓:匿名使用者

指標 你首先得給它開闢記憶體空間才行的 這樣子改下就對了

在char*pass下面加句

pass = (char *)malloc(sizeof(char)*64)

指標與陣列的區別和聯絡 20

5樓:匿名使用者

指標與陣列之間的恩恩怨怨

很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有

任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。

指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某乙個記憶體的位址。

指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。

陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別

和個數。陣列可以存任何型別的資料,但不能存函式。

既然它們之間沒有任何關係,那為何很多人把陣列和指標混淆呢?甚至很多人認為指

針和陣列是一樣的。這就與市面上的c 語言的書有關,幾乎沒有一本書把這個問題講透徹,

講明白了。

指標和陣列的對比

指標儲存資料的位址,任何存入指標變數p 的資料都會被當作位址來處理。p 本身的位址由編譯器另外儲存,儲存在**,我們並不知間接訪問資料,首先取得指標變數p 的內容,把它作為位址,然後從這個位址提取資料或向這個位址寫入資料。指標可以以指標的形式訪問*(p+i);也可以以下標的形式訪問p[i]。

但其本質都是先取p 的內容然後加上i*sizeof(型別)個byte 作為資料的真正位址。通常用於動態資料結構通相關的函式為malloc 和free。通常指向匿名資料(當然也可指向具名資料)

陣列儲存資料,陣列名a 代表的是陣列首元素的首位址而不是陣列的首位址。&a 才是整個陣列的首位址。a 本身的位址由編譯器另外儲存,儲存在**,我們並不知道。

直接訪問資料,陣列名a 是整個陣列的名字,陣列內每個元素並沒有名字。只能通過「具名+匿名」的方式來訪問其某個元素,不能把陣列當乙個整體來進行讀寫操作。陣列可以以指標的形式訪問*(a+i);也可以以下標的形

式訪問a[i]。但其本質都是a 所代表的陣列首元素的首位址加上i*sizeof(型別)個byte 作為資料的真正位址。通常用於儲存固定數目且資料型別相同的元素。

隱式分配和刪除自身即為陣列名

6樓:匿名使用者

區別:c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只指向棧區的且指標的移動範圍是有限的,即陣列長度。

而且陣列在定義之初就已經有了自己的記憶體,一般的指標如果未指向某乙個記憶體塊時,它是沒有自己的記憶體的,即所謂的野指標。

聯絡:如上面所說,陣列只是定義在棧區的乙個連續變數,它的首位址就是乙個指標。

總結:不僅陣列有指標,所有變數都有指標,指標說白了就是記憶體中的位址,就像乙個房間必須有乙個房間號。在c/c++語言中定義乙個指標,就是在棧區開闢乙個記憶體空間用來存放它指向的記憶體位址,然後給指標賦值,就是把位址值賦值給剛才開闢的記憶體空間,然後通過訪問該記憶體中的位址值來間接訪問該位址下存放的資料。

如果該位址值指向的是一塊靜態儲存區,如字串常量等,當然就不可以修改指向的內容啦。

經驗之談,樓樓加分啊

7樓:匿名使用者

我的回答全是手寫!

舉個例子你就明白了:int *p ,a[5],b;

p=a;

b=*p;

**包含的資訊:定義指標p和乙個陣列a[5],將a[5]的首位址給指標p

將指標p的內容給b。

a表示a[5]的首址 a等價於&a[0] 。 指標就是位址。(int *p;用*以區別一般變數 這和後文中的*意義不同 要注意 後文中的*表示取位址儲存的內容)

8樓:匿名使用者

陣列時連續分配一串單元,數目開始定義的時候就必須固定下來,看起來整潔,但是寫的程式是死程式,容易浪費記憶體

指標存放乙個位址值,表示指向某乙個單元,可以用指標來索引單元。陣列可以完成棧,堆,樹等等的操作,它在程式設計時候的好處是非常的靈活,在構建思路的時候有很大的靈活性。

9樓:zsk康

看陳正衝老師的 c語言深度剖析

他們沒有任何關係!只是長得比較像,喜歡在一塊玩兒,更可恨的是還穿一樣的衣服來迷惑你問這個問題!呵呵

10樓:匿名使用者

忘記了,貌似陣列是有長度保護的,頭就是指標,而指標就是指標。記不得了。。。

指標與陣列的區別和聯絡是什麼?

11樓:李献林

指標與陣列之間的恩恩怨怨

很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有

任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。

指標就是指標,指標變數在32 位系統下,永遠佔4 個byte,其值為某乙個記憶體的位址。

指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。

陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別

和個數。陣列可以存任何型別的資料,但不能存函式。

既然它們之間沒有任何關係,那為何很多人把陣列和指標混淆呢?甚至很多人認為指

針和陣列是一樣的。這就與市面上的c 語言的書有關,幾乎沒有一本書把這個問題講透徹,

講明白了。

指標和陣列的對比

指標儲存資料的位址,任何存入指標變數p 的資料都會被當作位址來處理。p 本身的位址由編譯器另外儲存,儲存在**,我們並不知間接訪問資料,首先取得指標變數p 的內容,把它作為位址,然後從這個位址提取資料或向這個位址寫入資料。指標可以以指標的形式訪問*(p+i);也可以以下標的形式訪問p[i]。

但其本質都是先取p 的內容然後加上i*sizeof(型別)個byte 作為資料的真正位址。通常用於動態資料結構通相關的函式為malloc 和free。通常指向匿名資料(當然也可指向具名資料)

陣列儲存資料,陣列名a 代表的是陣列首元素的首位址而不是陣列的首位址。&a 才是整個陣列的首位址。a 本身的位址由編譯器另外儲存,儲存在**,我們並不知道。

直接訪問資料,陣列名a 是整個陣列的名字,陣列內每個元素並沒有名字。只能通過「具名+匿名」的方式來訪問其某個元素,不能把陣列當乙個整體來進行讀寫操作。陣列可以以指標的形式訪問*(a+i);也可以以下標的形

式訪問a[i]。但其本質都是a 所代表的陣列首元素的首位址加上i*sizeof(型別)個byte 作為資料的真正位址。通常用於儲存固定數目且資料型別相同的元素。

隱式分配和刪除自身即為陣列名

12樓:

指標可以看作是windouws系統的快捷方式,陣列可以看做是存有資料的資料夾。訪問指標將會帶領你找到並操作真實的資料夾,訪問陣列時則是直接找到並操作資料夾。

13樓:匿名使用者

區別:c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只指向棧區的且指標的移動範圍是有限的,即陣列長度。

而且陣列在定義之初就已經有了自己的記憶體,一般的指標如果未指向某乙個記憶體塊時,它是沒有自己的記憶體的,即所謂的野指標。

聯絡:如上面所說,陣列只是定義在棧區的乙個連續變數,它的首位址就是乙個指標。

總結:不僅陣列有指標,所有變數都有指標,指標說白了就是記憶體中的位址,就像乙個房間必須有乙個房間號。在c/c++語言中定義乙個指標,就是在棧區開闢乙個記憶體空間用來存放它指向的記憶體位址,然後給指標賦值,就是把位址值賦值給剛才開闢的記憶體空間,然後通過訪問該記憶體中的位址值來間接訪問該位址下存放的資料。

如果該位址值指向的是一塊靜態儲存區,如字串常量等,當然就不可以修改指向的內容啦。

經驗之談,樓樓加分啊

指標和指標變數有什麼區別呢?

14樓:蓋辜苟

用例子來看一下。

int a=3;

int *p;

p=&a;

現在來看一下。a=3這個式子先解釋一下

等式右邊是常量,左邊是變數。

同理的p=&a,左邊的是指標變數,右邊的是指標

指標的基本概念:為了區別記憶體的不同位置,記憶體被分成位元組,記憶體的全部位元組順序地賦予乙個稱為位址的編號。程式中的變數將在記憶體中佔據一定的記憶體位元組,在這些位元組中儲存的資料資訊稱為變數的內容。

乙個變數占用連續的若干個記憶體位元組時,最前面的乙個位元組的位址就作為該變數的位址。指標就是記憶體位址,是變數的位址,或函式的入口位址。變數的位址在程式執行時,起著非常重要的作用。

當計算機在計算含有變數的表示式時,計算機按變數的位址取出其內容,並按變數的位址將計算結果存入到變數佔據的記憶體中。

如**:  int x=l;  x=x+2;  其中語句「x=x+2;」中的第乙個x涉及到變數x佔據的記憶體,第二個 x是引用變數 x的內容。該語句的意義是「取x的內容,完成加上2的計算,並將計算結果存入變數x佔據的記憶體中。

」指標變數和它所指向的變數:在c語言中,位址也作為一種值,能被儲存、比較、賦值,並稱位址資料為指標型別,而稱儲存位址值的變數為指標變數,簡稱指標。c程式可用運算子&取變數的位址,如表示式&x的值就是變數x的位址。

程式除能按名引用變數外,也可利用變數的位址引用變數。按變數名引用變數稱為直接引用,而將變數a的位址存於另一變數b中,借助於變數b引用變數a稱為對a的間接引用。

定義指標變數的一般形式為:  型別 * 指標變數名;  或  型別 * 指標變數名=初值表示式;  其中,指標變數名是識別符號,指標變數名之前的符號「*」,表示該變數是指標型別的。而最前面的「型別」,表示該指標變數能指向變數或函式的型別。

初值表示式是乙個位址表示式,如表示式中有某變數的位址表示式,則這個變數應是前面已定義的。

在c語言中,當定義區域性指標變數時,如未給它指定初值,則其值是不確定的。程式在使用它們時,應首先給它們賦值。誤用其值不確定的指標變數間接引用其它變數,會引起意想不到的錯誤。

為明確表示指標變數不指向任何變數,在c語言中用0值表示這種情況,記為null。

如  ip= null;  也稱指標值為0的指標變數為空指標。對於靜態的指標變數,如在定義時未給它指定初值,系統自動給它指定初值0。

指標變數取程式物件的(開始)位址值,不能將乙個整型量或任何其它非位址值賦給乙個指標變數。另外,指標變數對所指向的物件也有型別限制,不能將乙個不能指向的物件的位址賦給指標變數。

如有以下定義:  int i=100,j,*ip,*intpt;  float f,*fp;  以下**如注釋所敘。  ip=&i;/*使ip指向i*/  intpt=ip;/*使intpt指向ip所指變數*/  fp= &f;/*使fp指向正*/  ip=null;/*使 ip不再指向任何變數*/

在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為"指標"。

意思是通過它能找到以它為位址的記憶體單元。 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。

作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是乙個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。

指標是程式語言的乙個重要概念。指標在c程式中有以下多方面的作用:

利用指標能間接引用它所指的物件。

利用各種型別的指標形式引數,能使函式增加描述能力。

指標與陣列結合,使引用陣列元素的形式更加多樣、訪問陣列元素的手段更加靈活。

指標能用來描述資料和資料之間的關係,以便構造複雜的資料結構。當乙個資料a要關聯另乙個資料b時,在資料a中增加乙個指向資料b的指標就可實現資料a關聯資料b。結合系統提供的動態分配儲存設施,又能構造出各種動態資料結構。

關於c 中sizeof用法和陣列指標問題

迎風搖擺的樹葉 sizeof arr1 arr1是陣列,arr1裡面是int變數 佔據4個位元組,所以3個變數佔據12個位元組。int source source是乙個指標,若是sizeof source 之後你會發現是4 因為所有的指標都是大小為4 source是指標所指向的元素,int型別 佔據...

C語言中關於指標和陣列命名處的問題

空雪夢見 前者出錯的原因就和 int a 10 a 1 是一個道理。一個是可以往裡面存指標的陣列,一個是指向陣列的一個指標。後者,char month 是宣告 指向陣列的一個指標 的語法這種語法必須指定陣列的大小才能宣告。char month 是宣告 一個可以存指標的陣列 的語法,後面就適用 初始化...

c陣列指標問題p 為什麼會報錯呢

上面說的都很對 不過我想樓主的題目好像是說陣列指標的問題,如果樓主是想要實現陣列指標的話 int p name 是不對的,這個p只是乙個普通的int型別指標,並不是陣列指標 應該寫成 int p 3 name 這樣p才是乙個陣列指標,而且是 int 3 型別的陣列指標這樣的話cout p 0 end...