1樓:網友
這個new 每次會強制分配,新空間,我舉個例子,string a = new string("abc");string b = new string("abc");即使這樣a!=b,因為當你new是系統會你新開闢你乙個空間,每次執行都是不一樣的。
你是用什麼編譯工具編譯的;我覺得是不是說反了。
我給你分析下,只有在new_out [i],取值才是有有效的,new_out [i-100] 【中的i-100就是無效的i=0時 等於-100這就是無效的,結果當然是無效的。
2樓:網友
int a[100]=new int[100];這句定義本來就有問題!int a[100]相當於已經定義了乙個陣列a,並已經分配了記憶體位址。陣列相當於指標常量,是無法改變位址的,而後面的=new int[100]顯然是給它重新賦給新申請的記憶體位址,本來就錯的,按理說無法編譯通過。
下面的按理說是正確的。還有,上面for迴圈語句中int i相當於重複定義,需要刪除乙個才能行!
指標陣列與指向指標的指標有什麼區別
3樓:科技攻客
他們的區別是:指標陣列,表示的是乙個由指標變數組成的陣列也就是說其中的元素都是指標變數,而陣列指標表示的是這是個指向陣列的指標。
那麼該指標變數儲存的位址就必須是陣列的首位址得是個指向行的位址,比如a[3][4]陣列中的 a,a+2 等,不能是具體的指向列的位址,如 &a{2][1], a[2][1] 這類位址。
指標陣列:指標陣列可以說成指標的陣列,這個變數是乙個陣列。其次指標修飾這個陣列,意思是說這個陣列的所有元素都是指標型別,在 32 位系統中指標佔四個位元組。
陣列指標:陣列指標可以說成是陣列的指標。這個變數是乙個指標。其次陣列修飾這個指標,意思是說這個指標存放著乙個陣列的首位址,或者說這個指標指向乙個陣列的首位址。
根據上面的解釋可以瞭解到指標陣列和陣列指標的區別,因為二者根本就是種型別的變數。
4樓:atm半夏螢光
指標陣列:表示的是乙個陣列,陣列中每乙個變數都是指標型變數。陣列指標:表示的是乙個指標型別的變數,這個指標變數指向的是乙個陣列。
陣列指標的本質就是乙個指向陣列位址的指標。所佔記憶體空間大小為4char(*p),這裡的p指向乙個含有4個char型別的陣列。
假設char a[4]=,陣列的位址和陣列中首元素的位址相同,a+1是在陣列移動乙個元素的長度,移動距離為1,而p+1是是移動乙個陣列的長度,移動距離為4。
關於二維陣列和指標的關係,二維陣列的本質是乙個二維指標,例如 char a[2][3] ,char **p=a,*p(i)+j 是指向元素p[i][j]的位址,等同於a[i]+j,*(p(i)+j)表示a[i][j]元素,等同於*p[i][j],*p(i)是指向陣列第i行的位址,*p是表示二維陣列的位址。
5樓:逸_公子
首先我們要知道指標與資料的關係;指標實際上是乙個雙字的資料,也就說它也是乙個數。
打比方來說:
乙個城市(記憶體)都是小房子(記憶體單元),每個房子都有門牌號(記憶體單元的位址)。
快遞員送貨時按照門牌號給大家送貨(資料)。
如果你到親戚家去了,貨物要送到你手上,你必須在你家的房子上留一張紙條(指標),上面寫著你親戚家的門牌號;於是快遞員先到你家取到你留的紙條,根據紙條找到你親戚家,然後把貨送給你。
指標陣列就是連續一條街道上的房子主人各自都留了紙條等待送貨員取用。
陣列指標就是一條街道的第乙個房子的門牌號。
總之,指標陣列是元素全部都是指標型別的陣列,本質是陣列;
陣列指標是指乙個指向陣列元素的指標,本質是指標指標陣列儲存了多個記憶體位址,而陣列指標則是第乙個元素的記憶體位址。
6樓:網友
舉例來說吧:*p[3],*p:第乙個表示存在乙個陣列p[3],使得這個陣列中的每乙個元素都是指標,即*p[0],*p[1],*p[2];第二個表示存在乙個指標,這個指標指向了另乙個指標*p,可以實現指標之間的資料傳遞。
7樓:網友
指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。
陣列指標:a pointer to an array,即指向陣列的指標。
還要注意的是他們用法的區別,下面舉例說明。
int* a[4] 指標陣列。
表示:陣列a中的元素都為int型指標。
元素表示:*a[i] *a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標。
表示:指向陣列a的指標。
元素表示:(*a)[i]
8樓:
指標陣列宣告的是陣列,陣列裡放的是指標;而指向指標的指標宣告的是指標,只是這指標指向另乙個指標。
1.宣告時二者不同,如:char *p[10],是指標陣列,宣告p是有10個元素的陣列,其每乙個元素都是指向char型變數的指標。
而int **p是宣告p是乙個指標,它指向乙個指向int變數的指標。
2.訪問時二者不同,指標陣列是通過陣列獲得指標,再由獲得的指標獲得變數,如:b=*p[2]是把陣列p第三個元素作為指標由*取其所指變數的值賦給b。
而b=**p是把指標p指向的指標所指變數值賦給b。
3.指標陣列至少有兩個,常常是多個,可以用p++、p--獲得下乙個或上乙個指標;而指標的指標只有1個,類似p++、p--的操作都是非法的。
指標與陣列的區別和聯絡
9樓:匿名使用者
指標與陣列之間的恩恩怨怨。
很多初學者弄不清指標和陣列到底有什麼樣的關係。我現在就告訴你:他們之間沒有。
任何關係!只是他們經常穿著相似的衣服來逗你玩罷了。
指標就是指標,指標變數在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 作為資料的真正位址。通常用於儲存固定數目且資料型別相同的元素。
隱式分配和刪除自身即為陣列名。
10樓:網友
區別:c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只指向棧區的且指標的移動範圍是有限的,即陣列長度。
而且陣列在定義之初就已經有了自己的記憶體,一般的指標如果未指向某乙個記憶體塊時,它是沒有自己的記憶體的,即所謂的野指標。
總結:不僅陣列有指標,所有變數都有指標,指標說白了就是記憶體中的位址,就像乙個房間必須有乙個房間號。在c/c++語言中定義乙個指標,就是在棧區開闢乙個記憶體空間用來存放它指向的記憶體位址,然後給指標賦值,就是把位址值賦值給剛才開闢的記憶體空間,然後通過訪問該記憶體中的位址值來間接訪問該位址下存放的資料。
如果該位址值指向的是一塊靜態儲存區,如字串常量等,當然就不可以修改指向的內容啦。
經驗之談,樓樓加分啊。
11樓:網友
舉個例子你就明白了:int *p ,a[5],b;
p=a;b=*p;
將指標p的內容給b。
a表示a[5]的首址 a等價於&a[0] 。指標就是位址。(int *p;用*以區別一般變數 這和後文中的*意義不同 要注意 後文中的*表示取位址儲存的內容)
12樓:網友
陣列時連續分配一串單元,數目開始定義的時候就必須固定下來,看起來整潔,但是寫的程式是死程式,容易浪費記憶體。
指標存放乙個位址值,表示指向某乙個單元,可以用指標來索引單元。陣列可以完成棧,堆,樹等等的操作,它在程式設計時候的好處是非常的靈活,在構建思路的時候有很大的靈活性。
13樓:zsk康
看陳正衝老師的 c語言深度剖析。
他們沒有任何關係!只是長得比較像,喜歡在一塊玩兒,更可恨的是還穿一樣的衣服來迷惑你問這個問題!呵呵。
14樓:網友
忘記了,貌似陣列是有長度保護的,頭就是指標,而指標就是指標。記不得了。。。
指標與陣列的區別和聯絡是什麼?
15樓:網友
指標可以看作是windouws系統的快捷方式,陣列可以看做是存有資料的資料夾。訪問指標將會帶領你找到並操作真實的資料夾,訪問陣列時則是直接找到並操作資料夾。
C語言指向多維陣列的指標問題
a a 0 a 0 0 a 0 1 a 0 2 a 1 a 1 0 a 1 1 a 1 2 a 2 a 2 0 a 2 1 a 2 2 二維陣列首位址 就是二維常量指標 a可以看成是 一維指標陣列a 3 的首位址即 a的值是 a 0 a 0 的值是 a 0 0 的位址a 1的值是 a 1 a 1 的...
C建立包含同學資料的物件陣列,並用指標指向首物件,輸出結果為什麼是亂的
include include include using namespace std class student public student int,int student void display return this this number stu.number this score st...
如何判斷指標指向的是陣列還是單個變數
ls錯誤。陣列是陣列,本身不是指標 陣列退化為對應指標僅在傳遞函式引數等少數情形下成立 而且這些情況下,陣列本身不變,只是另外構造了乙個和指向陣列首元素的指標 這樣陣列和指標的值相等 而已。指標無論是在編譯期還是在執行期都不包含指向的物件的型別資訊。對於sizeof,是在編譯期計算的,只有對於陣列名...