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當...