指標陣列的初始化 引用 賦值 20

2025-01-27 08:40:26 字數 4851 閱讀 1290

指標陣列的初始化 引用 賦值

1樓:環球爺們兒

以整型為例。

初始化 int *p[10] =

賦值 p[0] =new int(100);

引用不知道怎麼寫,你可以用指向指標陣列的指標。

typedef int* int_ptr;

int_ptr (*p)[10]; 指向有十個整型指標元素陣列的指標。

做為函式引數時,像下面這樣寫。

void foo(int_ptr (*p)[10])呼叫fooint_ptr array_i[10];

foo(&array_i);

或者。int *array_i[10];

foo(&array_i);領分!

2樓:網友

比如在c中,可以這樣寫。

int a=1,b=2,c=3;

int *p[3];

p[0]=&a;

p[1]=&b;

p[2]=&c;

怎麼給乙個指標賦值

3樓:一棵無所不知的小白菜

1、開啟visual studio,建立乙個控制檯應用程式,用於演示指標的使用、賦值和取值。

2、在main方法中,新增乙個unsafe**段,c#語法中的指標都需要放在這個**段中。

int* p;

4、如果像普通變數一樣直接賦值10,從**效果可以看出,這樣是不被允許的,編譯器直接報錯。

5、那麼,另外定義乙個普通變數,例如:int x = 100。

p = &x。

7、在指標變數前面加乙個星號,表示獲取這個指標指向的位址中的值。例如想要輸出指標p的值,就使用 *p 即可。

4樓:風若遠去何人留

要改p–>a的值,和在這個函式里面是一樣的直接p–>a=要賦值的值。

這樣就可以了。

唯一需要注意的就是要賦值的是結構體指標還是結構體變數,如果不是指標那就要改成點了這樣。

5樓:網友

不建議從鍵盤輸入乙個值直接複製給指標變數。因為如果讓使用者自己從鍵盤輸入乙個值給指標,就形成了野指標,野指標的不當使用會帶來嚴重的後果。

6樓:不成材的樹

上面 有人說了野指標的問題,的確是這樣的!

可以使用強制轉換的吧:

int num;

int *p=(int *)num;

7樓:上_善_下_流

指標其實就是記憶體位址。

使用指標可以深入硬體底層。

可以用&運算子將變數的位址取出。賦予指標。int a=5,int* p=&a;

陣列中,陣列名錶示陣列的起始位址。因此可以將陣列名賦予指標。int arry[50];int* p=array;

還有動態分配記憶體時。int* p=new int[50],classa *p=new classa();也是在執行時堆中分配指定大小的記憶體塊。並把記憶體塊起始位址賦予指標變數p.

簡單的應用就是這樣。

複雜的指標應用比如函式指標等。說白了還是位址。用來實現類似於c#委託功能。用久了自然會清晰了。

在指標的運算中。編譯器會自動計算位址增加量。

比如針對 p++後;

對其解引用後*p指向的就是下乙個元素的值。比如對於陣列指標。*array=array[0]

array+1)=array[1];

8樓:飄風弓手

c語言……

定義指標……

int *p,a;

p=a;第一:scanf("%d",*p);

第二:scanf("%d",&a);

第三:scanf("%d",p);

9樓:網友

int *p;

scanf("%d",p);

定義指標p,在賦值就ok了。

為什麼指標變數必須先賦值,再使用

10樓:網友

為了安全訪問。

當我們定義乙個變數並訪問它,比如 int a; a=10; 編譯器幫助我們在記憶體中分配位址及空間(長度),在訪問(使用)時我們只要在源**中編寫它的名字即可,根本不需要關心具體位址是多少,編譯器在編譯時自動會幫助我們在目標**中轉換為具體位址。

比如當編譯器在為變數(物件)分配記憶體後就確定了具體位址是1000,則當前名稱空間內凡是遇到a就會自動轉換為1000,所有對a的操作都替換為對位址1000的操作,而且由於定義時已確定變數型別,編譯器也知道應該以何種方式訪問該位址,比如長度及資料編碼(int是4位元組,正數採用原碼,負數採用補碼)。

瞭解以上細節可以明白乙個道理,直接使用位址(指標)運算元據,相對使用變數名運算元據更危險,因為這要求程式設計師非常明確在使用指標時所做的一切都必須「完全正確」,使用指標訪問時,編譯器等於將錯誤檢查工作中的一部分工作交給程式設計師自己管理(這是指標方便高效的代價)。

因此養成初始化指標是乙個簡單良好的安全習慣,當指標暫時沒有取得正確的位址前也必須初始化null,而在使用指標前也必須養成先判斷再訪問的習慣,比如 if (p),不要怕多打乙個if感到麻煩。而如果指標未被賦值為正確的位址,指標變數中的位址是隨機的,也許是上個臨時變數或程式的殘留,而這些值是不確定的,當這個值正好為某個系統敏感位址,你的程式很可能就會訪問到錯誤的位址,大部分情況會引起程式崩潰甚至系統崩潰。

當你的程式大到一定規模後,如果某處指標訪問出現錯誤,查錯的難度很大,大到你也崩潰。

關於陣列首位址賦值給指標和陣列指標的問題

11樓:網友

權威答案:

1. a是陣列的首位址,&a是不符合語法的,因為a是常數位址,它是沒有位址的位址,有的c++版本,可能把 &a直接處理成a了,所以,是一樣的了;

2。 int (*pa)[5] ,定義的二維陣列指標,相當於 int pa[ ]5];

而a是一維陣列,所以,型別不一會報告出錯;

12樓:雙存釁璟

陣列之間直接賦值是不容許的!可以使用字串複製函式strcpylz的程式可以改為。

#include

charname[10];

voidaa(char

p)其實strcpy很不安全,尤其在lz的程式中。

指標這方面的書籍」——建議看《c和指標》

13樓:網友

a代表的是陣列首元素的首位址,即&a[0]的位址;

a代表的是陣列的首位址;

a+1代表的是a[1]的首位址;

再看int (*pa)[5]這個定義的意思是定義乙個陣列指標,(陣列為匿名的包含5個元素的陣列),指向的是整個陣列,而非單個陣列元素。

不同的編譯器未必是一樣的處理,有些可能是警告,執行時也沒問題(因為a和&a位址是相同的)

但有些編譯器可能就直接報錯,因為這麼用確實是錯的。

14樓:網友

從編譯器的角度來講,int *p定義了乙個指向int型的指標p。而a本身已經是指向int型的指標了,對a做取值操作,返回的結果是int **型別的,造成型別不匹配,所以不能這樣寫:int *p = &a;

而int (*pa)[5]定義了乙個指向5個元素的int陣列的指標,而a只是陣列的首位址,&a才是陣列的指標,同樣也是因為型別不匹配。

15樓:灰人王

a本身就是指標了,你取它的位址,就是取指標的位址,那當然不對了。

指標變數賦值方式

16樓:信必鑫服務平臺

指標變數賦值有三種方式:int i1、i2以及i3。

1、nt *p1=&i1,*p2=i2; 用整形變數的位址給基型別為整形的指標變數賦值。

2、p1=&i3; 給指標變數賦予變數的位址。

3、p1=p2; 通過指標變數給指標變數賦值。

存放位址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的位址。

c語言可以用指標陣列賦值給陣列指標嗎?

17樓:網友

我這裡有c++環境,幫你試了一下不行(當然,也有變相的方法,就是將陣列指標的首元素位址給指標陣列中的乙個指標),估計c差不多。

二者的型別系統認為是不相等的。

我這裡定義了乙個指標陣列 b,並且對它賦值了。宣告瞭乙個陣列指標c,賦值時候就有圖中的提示了。反過來一樣的。

如果想賦值和使用,可以參考圖,通過結果可以看出是正確的。

陣列和指標的賦值

18樓:網友

a正確char *s表示s是乙個指標,s=「olympic」表示s指向該字串的首位址。

b錯誤在於s是乙個陣列只能在初始化時被定義,之後就不能作為左值被整體賦值,但是可以對他的單個元素進行操作,而且陣列s的空間太小也容不下這個字串,因為"olympic"實際上是"olympic'\0'",所以要定義八個就位元組的空間。

正確定義:char *s[8]=;或char *s[8]="olympic";

c沒有大括號。

d的錯誤如b。

19樓:網友

d正確。

a定義了指標s,可s沒有分配空間。

b中,空間不足,應該是char s[8];

c中,於a類似。

d正確,為陣列賦值。

20樓:童川

a正確吧 b的大小不夠 cd都是基本表達方式錯誤。

21樓:甘正陽

a正確,b錯誤,c錯誤,d錯誤。

c語言指標初始化,c語言指標初始化

int array 4 5 6 一級指標,指標向一個陣列,該陣列為int 4 5 6 int a 4 5 6 pa 二級指標,指向上一行的一級指標 對於動態分配的結構,不可能用陣列這種形式來儲存的。因為陣列的下標必須在編譯時刻明確為常量。樓主用的c 可以考慮用stl的vector。另外,我覺得本身用...

c語言指標初始化的問題

如果你是需要賦字串的,不需要給它分配空間,但是如果你要給指標結構體賦某個值,那是需要給指標指定記憶體空間的,所以你上面的程式只要這樣就好了 main s的話,就是後面的str1之類的東西是要一個地址 main str2 bushishabi 去掉 printf s n s n str1,str2 要...

c語言定義整型陣列並未初始化資料

首先要清楚什麼是初始化 在宣告變數的同時賦值就是初始化。而在其後的賦值語句就不是初始化。一般來說,如果你不給變數一個確定的值,就直接引用它,則系統不能保證執行的唯一性,而這是我們程式所不允許的。所以我們一般用初始化的方法來確定其值。如char str 100 引用memset str,sizeof ...