設有如下變數定義charaa3abcdef

2021-05-28 14:36:31 字數 2763 閱讀 7273

1樓:匿名使用者

char (*p)[3]

我們可以可以看到p是指向一個有三個元素的字元陣列的指標。

那麼當p++的時候,相當於跳過指向的陣列。

再來看一下,char aa[ ][3]=;

我們可以發現aa是二維陣列,而p指向的是一維陣列。

所以我們去分解aa讓他變成兩個一維陣列

和p在++操作前其實是指向前面那個一維陣列,當p++之後,p此時其實指向了,那麼**p就是取當前陣列的第一個字元,我們可以知道那個字元就是『d』。

清楚了嗎?

你會有疑問為什麼二維陣列為什麼可以分解成兩個一維陣列,因為陣列不管是幾維其實就是一塊連續的記憶體。『d』其實就是接在『c』的後面。懂了嗎?

若有以下的陣列定義:char str[]="abcd";char b[]={'a','b','c','d','e'},這兩個陣列他長度為什麼

2樓:匿名使用者

字元陣列!= 字串

字串要求有『\0'結尾,字元陣列沒有!

char str="abcd" ; 這種初始化版,是將一個字串常量權賦值給一個字元陣列str,是「abcd」常量中含有'\0'

char b= ; 這種初始化,是給陣列中的每個元素賦值,與字串無關。因此,沒有』\0'的概念

3樓:

str陣列的長度是5,包括4個字母和一個字串結束符b陣列的長度也5,包括5個字母

使用雙引號設定的字串,系統自動新增字串結束符使用單引號,內容是按單字元處理的

4樓:匿名使用者

額,我只知道你用strlen函式時第一個是返回4,後面那個不太清楚了,建議你以後凡是遇到字串的都用string來搞吧,比char的陣列容易的多,也安全的多。

設有變數定義語句char a; 則下面的賦值語句中 ( ) 是正確的。 a.a=』&』 b.a=」&」 c.a=』16』 d.a=』 』

5樓:匿名使用者

b選項中的"&"是一個字串,不是字元,因為它是用雙引號括的。

c選項中的單引號之間包含了多個字元,是個多位元組字元,嚴格意義上不算錯,它會將低位元組字元賦予變數a。

d選項中在要把單引號字元賦予a,而單引號同時也是一個操作符號,因此要用轉義字元,即加上斜線,寫成a='\''

a選項是標準形式。

對兩個陣列a和b進行如下初始化: char a[] = 「abcdef」; char b[] = {『a』,『b』,『c』,『d』,『e』,『f

6樓:蒼穹夜光

要不這樣理解吧

首先a作為字串長度為6;

作為字元陣列有7個元素,包含\0,a陣列的長度為7;

b是字元陣列有6個元素,不是字串,b陣列的長度為6;選d

7樓:匿名使用者

"abcdef」;是字串,字串預設是有字串結束符的。

所以選d

8樓:匿名使用者

樓主首先要明白的是什麼是長度。陣列元素的個數稱之為陣列的長度。

現在再看看問題 第一個是 字串,第二個是字元陣列 ,字串以'\0'為結束符號,字元陣列不用。

那就很明白了。b 對。

要說明的是,雖然他們長度相同,不過佔的記憶體位元組數是不一樣的,第一個佔7個位元組(後面的'\0'佔一個。)第二個佔6個位元組。

9樓:酷兒

#include

void main()

;m=sizeof(a);

n=sizeof(b);

printf("a 所佔位元組數 %d,b 所佔位元組數 %d\n",m,n);

}所以選d

10樓:用飄柔洗腳丫

#include

#include

using namespace std;

int main();

cout<:67

答案自己猜

11樓:喜歡種蘑菇

答案是d,a陣列比b陣列長度長

原因:a陣列的長度是6,b陣列的長度是7。

在c語言中沒有專門的字串變數,通常用一個字元陣列來存放一個字串。字串總是以'\0'作為串的結束符。

因此當把一個字串存入一個陣列時,也把結束符 '\0'存入陣列,並以此作為該字串是否結束的標誌。

即陣列a的實際存放情況為:a b c d e f '\0'  而陣列b的實際存放情況為:a b c d e f

詳細說明:

把一個字串賦值給陣列:u4 str1=;

實際上陣列str1在記憶體中的實際存放情況為: c x k n m s l '\0'

這後面的'\0'是由c編譯系統自動加上的。所以在用字串賦初值時一般無須指定陣列的長度, 而由系統自行處理。

把字元陣列str1中的字串拷貝到字元陣列str2中,串結束標誌'\0'也一同拷貝。

個案:1、當陣列長度不夠。假設我們指定了陣列長度,如:u4 str1[7]=;

由於字元組str1的長度為7,所以後面的資訊會丟失,即'\0'丟失。

2、如果在給陣列賦值時,把每個字元單獨用引號括起來,也會丟失'\0'。

如:u4 str1=;

如果希望陣列以'\0'結束,則可以寫成以下三者之一:

u4 str1=; //字串賦值

u4 str1=; //人工新增

u4 str1[8]=; //故意給陣列預留一個空位

1 有如下定義 struct int x int ys 21,23,4p s寫出表示式 p x和px

1 p x 2 p x 3 2 34,12 struct int x int y s 2 1,2 3,4 p s 寫出表示式 p x和 p x的結果是什麼 求過程 10 由於 的優先符大於 所以第一個是先指向x然後向下移一個,第二個是先移一個然後指向x 前置 和後置 的問題 c語言陣列的初始化表示方...

設有變數定義「intx 1,y 2,z 3計算下列表示式的值

1 這個是要求什麼表示式的值呢?後面的除2 2 完全沒有作用啊,執行後x 2,因為x是整型 若是x float y 0.5 2,執行後x 1 2 逗號 運算子求職順序為自左至右,所以,執行 x,y 後x 0,y 3,z 3,然後求得最右邊x y z 6並將此結果賦給z 3 等號 運算子結合方向為自右...

MATLAB定義多個符號變數

用一個迴圈即可實現多變數定義 fori 1 100 syms x num2str i end 如果我們 不會太多的mantlab功能,那我們 就運用我們所知道版的去完成那些我權們未知的 功能,這樣也可不必被軟體約束和限制。我想問下 你學習了抄幾天matlab 或者是否壓 襲根沒有學習matlabma...