c語言問題,陣列與指標,C語言陣列和指標的問題

時間 2022-04-29 10:25:02

1樓:匿名使用者

char *a = "computer"; // a指向一個常量字串,常量字串是不能修改的,而你的for迴圈內要修改a指向的這個常量字串,自然要出錯

char a = "computer"; //這個a就是個普通陣列了,它的內容是可以改動的,就不會出錯了

2樓:飄零的狐狸

因為 a是個指標啊 所以應該賦值賦地址!

所以 應該 char *a =&"computer";(取地址 語法記不清了)

3樓:創作者

char *a = "computer"

a指向一個常量字串

4樓:匿名使用者

使用char *a = "computer";這表示字串"computer"是個常量,其地址賦給指標a;

使用char a = "computer";這表示字串"computer"是記憶體中可寫的一塊區域,是變數。

你的程式做字串逆序,把逆序後的字串寫回原來的記憶體單元,所以要求原來的記憶體單元,也就是變數a要為可寫的。

而你上面用char *a指向的區域為常量區,不能寫。所以程式執行會報不能為寫(written)的錯誤,而修改為char a後,"computer"的區域為陣列變數,可寫,就不會報錯了。

c語言陣列和指標的問題

5樓:舒淼閔語蝶

首先,o和j沒有初始化,這個需要初始化;其次,你的main()函式引用的function()函式,引數為整形陣列,但是你定義的function函式是整形指標,不知道這個會否有影響,檢查一下。

6樓:匿名使用者

b選項左邊p[0]表示整型陣列中的第一個元素,而右邊a是一個指向整型的指標的陣列的陣列名,所以不會相等,答案應該為c。

7樓:匿名使用者

a錯,因為p不是pointer

b錯,因為p[0]不是pointer

c對,意即a[1]=p;(p是陣列p的位址,也是p[0]的位址)d錯,a[0]是一個pointer,不能存整數

8樓:

答案是c,b是錯誤的,型別不匹配,p[0]是個整型變數,不能接受指標陣列首地址的賦值,整型變數和二級指標完全不相容!除非強制轉換,*(a 1)就是a[1],和p型別相容都是整型指標,所以選c,b沒有什麼好解釋的,是一個嚴重錯誤!

9樓:羅帥

答案(c).a選項中型別不同,b中也是型別不同,d中不能直接將整數賦值給指標

10樓:匿名使用者

陣列p 中把a賦值給陣列p 且放於第0項

c語言陣列名和指標的區別?

11樓:匿名使用者

陣列名確實表示指向陣列首地址的指標,但這個指標很特別,它的值(指標的值指的是指標所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首地址,如果有陣列char a;那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指標是可以的,再比如有陣列char a;那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指標p指向&a[1]。

它們的第二個區別是:每當用到陣列名這個指標的時候,系統都會傳入陣列的資訊,而普通的指標只是一個4位元組的整數,例如:

char a[5];

char *p = a;//指標a和指標p都指向陣列a的首地址cout << sizeof (a) << "##" << sizeof (p) << endl;

這時的執行結果是“5##4”

12樓:塞上孤獨

為什麼陣列名的那個指標不能運算,也就是你說的不能改寫,告訴你那是因為陣列一旦定義了,就放到常量區了,你試試看你能改變常量嗎?

c語言中關於指向陣列的指標

13樓:

char str[100];

char *pi=str; //相當於char *pi ;pi=str;

char **ppi=*pi;//這個地方抄錯了。應為char **ppi=&pi;

定義加*表明這是指標型別的變數

用的時候,就是用的指標,加*幹什麼。

只有取指標所指變數的值,或給指標所指的變數賦值的等涉及指標所指的變數的時候,

才會又加*號,表示獲取或改變,指標所指變數的值。

char x=10;

*pi =x; //給指標所指的變數賦值,改變指標所指變數的值(改變*pi) 。

x=*pi; //取指標所指的值,取指標pi所指的變數的值(表示為*pi)賦值給x。

14樓:匿名使用者

pi ppi是指標 帶*是取值的意思

*pi=str 意思是把str這個陣列的首地址 放在pi所指的空間裡 換句話說就是pi指向了str陣列。用pi+1之類的就可以指向陣列裡面的東西 *(pi+1)等同於str[1]

15樓:匿名使用者

因為不管是str還是pi, ppi都指的是地址,函式呼叫時只需要知道引數的地址就行,然後再去取裡邊的值,而不用加上星號來傳遞裡邊的值。

16樓:匿名使用者

因為陣列的名字,本身就是指向陣列頭的指標。另外char **ppi=*pi;是不對的吧。這意思是給一個指標賦值一個常數,這樣的賦值只允許右值為0的

17樓:

你給的第三條語句語法是錯的,應該是char **ppi=π

18樓:連嘉悅牢義

首先要明白,指標陣列中儲存的是指標,也就是說兩個元素都是指標,而且存放的也的確是“a”和“a”的地址,但要知道字串和字元是兩個不同的資料型別,也就是說雖然存放的地址是一樣的,但指標的型別不能理解為是指向字元“a”和“a”的指標,應該是指向字串“abcd”和“abcd”的,明白的麼?

19樓:端麗芳表曄

要點:理解陣列名其實就是一把指標!它指向所有元素的第一個inta[10];

則它的記憶體分佈:a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

a[9]

陣列名a

就是指向了第一個元素

a[0]

的地址(注意是地址)所以上面的也可表示為:

*(a+0)

*(a+1)

*(a+2)

*(a+3)

*(a+4)

*(a+5)

*(a+6)

*(a+7)

*(a+8)

*(a+9)這是一樣的!而如果定義一把指標並賦值:

int*p;p=

a;則p

現在和a都指向了第一個元素a[0]的地址,所以它的用法和a一樣如:*(p+0)=p[0]=a[0]=*(a+0)

,*(p+1)=p[1]=a[1]=*(a+1)……看領會下就懂了哦~~~

c語言問題陣列與指標

20樓:匿名使用者

scanf那裡,第二個引數是p,不是&p

21樓:再醉不逍遙

15行改成p = &a

c語言中:陣列指標與指標陣列有什麼區別?

22樓:匿名使用者

陣列指標是指向這個陣列首地址的指標,指向物件是這個陣列;

指標陣列是存放一類指標的陣列,這個陣列的每個元素都是一個指標;

例子:int a[10];

int* s;

s = a;//這裡s就是一個陣列指標,它的值就是陣列a 的首地址;當然,如果a是一個整數,那s就是一個指向整型的指標;

int a;

int* s[5];

for(int i=0;i<5;i++)s[i]=a;

//這裡s就是一個指標陣列,它的每個元素都是整型變數a的地址應該算比較明白了吧

謝樓上提醒

23樓:天雲一號

int (*p)[4]; // 定義一個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義一個指標陣列,陣列中每個元素是一個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是一個指標,指向一個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列

24樓:匿名使用者

1.大概說一下這三種

int * a;            這叫整型指標   這玩意兒不能指向陣列,搞清楚指向的是陣列首元素

int (* b);       這叫整型陣列指標     意思是指向陣列的指標

int * c[5]=null;          這叫整型指標陣列     意思是儲存指標的陣列

下來舉個例子,理解一下:

2.定義一個陣列,下面舉例解釋

int i[5]=;        //定義整型陣列,五元素皆為0

int n[5][5]=;            //定義二維陣列

3.三種分別舉例

(a的例子)

a=i;         //這裡i是陣列名,i相當於&i[0]。陣列名相當於是陣列i的首地址。此時* a指向陣列i首元素。

a++;然後輸出就是i[1]的值

(b的例子)

b=n;        //二維陣列名相當於n[5]這個陣列,注意這塊兒,這塊兒最難搞清楚。n代表的不是第一行第一個元素的地址,而是代表第一行元素的所有地址的陣列。這塊的指標陣列b相當於存放了n陣列第一行的所有元素的地址。

//這塊的陣列指標b和上面的指標a比較,a指向的是陣列的首元素,而b指向的是整個陣列(或者說是存放了整個一維陣列的多個元素(二維陣列由一維陣列構成,二維陣列的第一行即是一個一位陣列))

然後我們輸出(* b)[2]相當於輸出了n[0][2]

如果b++然後輸出(* b)[2]相當於輸出了n[1][2]

c的玩法:

太簡單了,不想說了。就是存放多個指標的陣列,自己想想。

25樓:匿名使用者

摟主先要明確每個詞的後面一個名詞代表其所要定義的型別陣列指標就是指向一個陣列首地址的指標(aa);

舉例:char a="hello world";

char *aa;

aa=a;

指標陣列就是一個陣列,這個陣列的元素是指標;

舉例:char a='t';

char *aa[2];

a[0]=a;

a[1]=a;

附:感覺樓上的這段舉例有點問題

int a[10];

int* s;

s = &a;

c語言的問題,指標陣列

26樓:匿名使用者

改變不了,字串常量是改不了的,你可以試試char *p = "aaaaa";

p[1] = b;這樣是改不了的

只能定義二維陣列才可以改

char p[3][100] = ; 這樣才可以改,不要問為什麼,字串常量就是不能改

27樓:千鋒教育

直接讓指標指向另一個字串即可

p[0]="aaaa";

28樓:橙

這樣定義指標指向的字串是無法修改的。

c語言陣列跟指標的問題

29樓:谷歌地

你這個冒泡冒的很有問題

交換的是指標,只是指標變了指向,但是實際的值沒變比如a[0] = 100,地址0xff0101; a[1] = 20;地址0xff0105

好,a[0] > a[1],你把p裡面的第一個元素第二個元素換一下,但是a沒變

a[0]還是等於100,a[1]還是20

所以你的冒泡在亂跳

C語言陣列(指標)越界訪問,C語言指標越界問題,大神指教!!!

與編譯器無關,只與記憶體管理機制有關,是作業系統級別的問題,堆疊的讀取方式只是資料結構上的不同,在機器層面,依然是單純的記憶體讀寫操作 陣列越界訪問的危險性不好評估,但確實是最嚴重的危險之一 結果基本上會100 崩潰,但是崩潰的原因很可能不一樣,就算是同一段越界 跑幾遍,原因也可能是不一樣的 指標越...

C語言指標和陣列的問題,急

斌and麗 你的程式本來就寫的有錯誤吧!你真的可以執行嗎?用的什麼工具啊?int main void int p1,p2,p3 p2 a 這種賦值是錯誤的吧 p1 a p3 a 4 getch 這裡應該改為getchar return 0 a a a 0 都是一個值,指向首地址。p1是取指標p1的地...

c語言指標陣列問題,求高手解惑

錯誤很明顯啊,int length char p 需要一個char 引數,你的str 卻是char 是一個指標陣列,明顯型別不匹配 看你的程式,應該是想輸入一個字串並判斷其長度吧 你把char str 20 改成 char str 試試 include include int length char...