C語言表示式問題以及指標陣列,C語言指標陣列的問題

2022-12-25 11:31:10 字數 3833 閱讀 5767

1樓:匿名使用者

1、那個表示式的意思是,a*2, 然後把4乘以5的結果賦值給a即最後 a 的值為20,a*2的結果沒有賦值給a。

2、char * name 宣告一個二維char型的指標。

這樣進行初始化

char *name[ ]=;

是因為編譯器可以根據""以及, 來確定二維char 型陣列的維數。

一維維數即為字串個數,3

二維維數是這幾個字串中,長度最長的那個的長度。

這下你應該清楚一些了吧?

2樓:木子小三

1. 表示式的值是a*2,而a=4*5。所以a=20,整個表示式的值是40.

2. 首先你要知道可以用指標定義字串的方法即 char *p=

相當於 char a=;

char *p=a;

那麼 把指標變成指標陣列就可以理解了:

char *p={"hello","yes"}這裡*p[0]就是"hello",*p[1]就是「yes」.

printf("%s",p[0]);就可以輸出「hello」

c語言指標陣列的問題

3樓:幕貫徹落實匣

p是指標,指標加法就是指標在記憶體中的移動,因此p+1就是使p指向下一個位置;0是下標號,亦即首元素;是陣列取元素值的一種方法,運算的結果是其中下標位置的值,與*類似,例如此處的*(p+1)等價於p[1],亦即a[1],因此輸出的值即a[1][0],就...

4樓:gta小雞

字串字面值常量就是指向其首地址的常量指標。

對於"foobar"這個字串,它的值就是指向首字母f的地址的常量指標。

注意是常量指標,也就是const char*型別,字串字面值常量是不可以修改的。

所以題中的規範寫法應該是const char *p=;

5樓:強樂穀梁安雙

putin高數裡面的array陣列是區域性變數,記憶體是臨時分配的,函式呼叫完了,記憶體就被釋放掉,其中儲存的資料也會改變,也就是說,指標p雖然依然能指到那個地址,但內容已經不是你輸入的那些了。你可以將主函式裡定義的all陣列通過引數傳遞但putin函式中,然後輸入資料。

6樓:

第一點,兩個按照順序儲存,所以噸輸出後輸出米,車,長

第二點,sizeof(arrayquantityunit)這句話的結果是4,因為指標是4個位元組

c語言指標陣列問題

7樓:匿名使用者

我所知道的區別就是:

前者字串元素不能被進行賦值運算(只能使用它已經初始化後的值,感覺就跟一串常數差不多了),否則會出現錯誤

而後者可以隨意賦值

8樓:匿名使用者

執行char *a=;時,編譯器先把"abc"放在記憶體裡一個連續的地址內,然後讓a指向它們的首地址,也就是'a'的地址.

而char a=;是先開拓一個a[3]的記憶體(佔4位元組,包括'\0'),然後把a,b,c存進去

9樓:匿名使用者

說幾點c語言講不到的吧。。。

首先 指標a,陣列a以及他其中的內容abc,都存放在記憶體的棧區,然而指標a後面的「abc」都存放在記憶體的常量區,放在常量區的是不可以修改的。

再其次,a[4]=, 陣列名是指向字元首地址的指標,也就是如你所說的,是指向a[0]的。。。

再者,他們說的可修改內容與否,你只需要瞭解即可,不需要知道為什麼,以後會學到的。。

10樓:金色潛鳥

char *a=; a 是指標。

char c=; c 是陣列。

初始化後 sizeof(a) 為 4,strlen(a) 為3。

同樣,sizeof(c) 為 4,strlen(c) 為3。

在語句中有時一樣,有時不一樣。

例如:char *a=;

char c=;

char b=;

int l;

l = sizeof(a);

printf("a: %d %s\n",l, a);

a=b; // a 允許

l = sizeof(a);

printf("a: %d %s\n",l, a);

l = sizeof(c); // a,c 方法一樣printf("c: %d %s\n",l, c); // a,c 方法一樣

// wrong c=b; // c 不允許strcpy(c,b); // c 只能這樣做l = sizeof(c);

printf("c: %d %s\n",l, c);

注意 a=b; 允許。c=b; 不允許 。 只能 strcpy(c,b);

輸出:a: 4 abc

a: 4 123

c: 4 abc

c: 4 123

11樓:匿名使用者

第一個是指標

第二個是陣列

c語言程式設計問題 指標陣列 很簡單的

c語言中指標陣列的問題

12樓:

這樣看:

0x00 : 0x78,0x99

0x78: 'h' 'e' 'l' 'l' '0' '\0'

0x99: 'w' 'o' 'r' 'l' 'd' '\0'

其中s就是0x00,然後,s[0]就是 (0x00 + 0 = 0x00)取內容,得到的值是0x78,然後列印的就是hello

*s,就是相當於s[0]

*s + 1,因為優先順序關係,先執行s[0],就是 0x78,然後加上1 = 0x79,列印就是 ello

*(s+1),根據優先順序,先執行 s+1 = 0x00+1 = 0x01,然後取值得到 0x99,列印的就是 world

13樓:老子很涼

首先你要理解指標陣列,顧名思義,本質是陣列,陣列的每個成員的型別都是指標。

如問題所述 char* 型別的陣列s[2], s表示的是陣列的地址,*s表示取s陣列的第一個成員。注意重點在這:他的每個成員都是char *(指標)型別的,所以取到的是h的地址,地址加一,向後偏移一位,因為前面的賦值:

char[1]的值為字串"hello"的地址,所以結果為"ello"。

c語言問題,有關指標陣列的問題

14樓:

「指標陣列」定義的是「陣列」而非「指標」,是說宣告瞭一個存放指標的陣列;一旦宣告,陣列的空間就分配好了,但陣列元素並非有效的指標而是機器垃圾值,要對元素賦正確值以後才能使用。char *a[3]=;意思是:宣告一個名為a的字元型指標陣列,有3個元素,並同時用常字串"one"、"two"和"three"的指標(第一個字元的地址,叫這個字串的指標)依次初始化;就是說這種寫法,{}中的3個字串也同時放在了某個地方且是不可更改的常量,只是把它們的首地址賦給了陣列a。

前面說了,char *a[3];是陣列,已經為a分配了記憶體,不必用malloc動態分配,寫成char *a[3];a[0]="one";a[1]="two";a[2]="thrdee";同樣是合法的。

肯定能編譯!通過指標可以實現對它指向的字串的任何操作。如果有char *a[3]=;,那麼printf("%c\n",a[0][1]);就輸出了字元n;*a[0][1]不行,因為的優先順序比*高,被編譯器解釋為*(a[0][1]),這就不合法了。

15樓:匿名使用者

1,不一定需要,你仍然可以 a[0] = "one"這樣

2 a[0][1]即可輸出n,前面不必加*

c語言表示式4637的值是

先運算 內的,然後運算 最後運算,答案是1。邏輯表示式運算結果 a b 只有a和b都是真時,表示式結果為真,有一個為假,表示式結果為假。a b a或b有一個為真,表示式結果為真,a和b都為假,表示式結果為假。a a為真時,表示式結果為假,a為假時,表示式結果為真。擴充套件資料 條件運算子是c語言中唯...

c語言表示式求值設intx 1,y 1表示式 xy的值

因為 與 的運算優復先級一樣,並且結制合性都是從右bai向左,所以 x 先計算dux x 等於2,再求反,非zhi0求反值為0,至於daoy y自減運算,運算子在後面先取y的值,再進行自減運算,y y的值為0,但是自減之前先取y的值參與邏輯或運算,0邏輯或1結果為1 x y 1 y 1,表示先賦值後...

c語言表示式中54840的值是多少

0 1,4 1 3,8 3為假,所以結果為假,即0 在c語言中,表示式5 3 2 8 4 0的值為多少?正常思路 由於邏輯運算子優先順序別低於 比較運算子同時這兩種都低於算術運算子,因此先考慮後半部分,4 0真值為1,而8 1的真值為0.再考慮或左邊的表示式,5 3 2顯然真值為1最終結果為1 0當...