C語言陣列下標可以為負嗎,c語言新手提問 如何定義陣列下標為負數的陣列

2021-03-26 17:47:12 字數 3684 閱讀 5885

1樓:金色潛鳥

分清宣告還是語句。

宣告裡的中括號裡的數字不能為

負。例如 int a[-2]; 是錯的,陣列大小不能為負。

語句裡的中括號,c/c++ 看成運算子,不叫標點符號。

陣列元素和指標有恆等關係:

a[i] == *(a+i)

所以,i 為 負 的時候,a[i] == *(a- fabs(i))。只要 a-fabs(i) 這個地址裡 有 數值,就可以拿來 運算使用。

"很多書上說陣列下標不能為負" -- 因為是初級教材。

高階教材裡甚至提到, a[i] == i[a] 這也是正確的 !(有人在「知道」裡問過,我也回答過。)

當然,只能是變數形式,不能寫阿拉伯數字,事實上,也確確實實正確的。

2樓:

下標可以是負值,它的意思是向前定址,前提是你知道向前定址尋的記憶體地址的東西是你之前已經指定好的,就相當於你動態開闢一塊記憶體給你的陣列,這樣這個記憶體裡面的所有資料都是你需要的,向前定址也沒什麼問題。

3樓:匿名使用者

不可以,下標必須是整數

c語言新手提問 如何定義陣列下標為負數的陣列

4樓:匿名使用者

type a[19];

type *a=&a[10];

於是,a成為一個下標為-9~9的type型陣列這東西純粹娛樂用,你剛開始學還是離這些東西遠一點

5樓:匿名使用者

下表為負的數bai組在du c 語言裡並不是不能做到。zhi首先,建立一dao個正常的陣列 int a[20];。然後用回指標指向其中間的元素

答 int *a2 = &(a[10]);

這樣,a[-10 ... 9] 就是一個可用的有效範圍了。

/* 樣例示範 */

#include

int main(int argc, const char *argv)

6樓:匿名使用者

我想那是一個錯誤,這是明顯的陣列越界 學這麼長時間c語言,我從來就沒陣列的下標是從0開始的` 不可能有 -2; 有什麼不懂 你可以給我簡訊`

7樓:末暉

我記得下陣列的下標沒有負數,最低是a[0],這個系統規定了的

8樓:匿名使用者

c語言不同於pascal和basic,c的陣列下標只能從0開始,

自已再做加減

9樓:盍然泥夜蓉

第一:下bai標是用在陣列du中的;

第二:定義陣列的

是時zhi候下標是代dao表陣列的長度專,比如inta[5];就是定義一個長度為屬5的存放整型的陣列,陣列就是集合,陣列a有5個元素,即a[0],a[1],a[2],a[3],a[4],

一共5個元素,此時下標就是第幾個元素的意思。

例子如下:

inta[5]=;

printf("%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4]);

//會輸出1,2,3,4,5

a[0]

=10;

printf("%d",

a[0]);

//輸出10

c語言二維陣列下標負數是什麼意思~? 5

10樓:一口沒水的枯井

1 在c語言中,二維陣列的下標可以為負數,表示指向前面的元素

2 對於二維陣列 int arr[m][n]來說,arr[i][j]的地址是 (*arr)+i*n+j,其值是*((*arr)+i*n+j)

3 分析本題

陣列a在初始化時後,其元素按照在記憶體中的排列順序依次為1,2,3,0, 4,5,6,0, 0,0,0,0

陣列a的第一個元素的地址為*a(或&a[0][0]或a[0]),記為p,

則,a[2][-2]的地址就是 p+2*4+(-2) 即p+6,即指向第7個元素,其值為6;

同理,a[1][3]的地址為p+1*4+3,即p+7,即指向第8個元素,其值為0

所以i的值為6

11樓:窗前過馬

在這裡這不是一個錯誤,但是一般不會寫這樣的程式。

首先應該理解語言中陣列的儲存結構。對二維陣列,在記憶體中實際是按行儲存的,也就是說二維陣列中元素是按行依次儲存在一片連續的的空間中。

取某個元素時,是先通過計算這個元素的地址,再通過計算得來的地址取得該元素的。依然以二維陣列為例,設陣列a[rows][cols](即有rows行,cols列),當訪問a[i][j]的時候,是先通過i,j的值計算得到要取的元素的地址,再在這個地址上取得該值的。計算地址的方法是:

a + i*cols + j, 這裡a就是陣列名,它實際存放著上是這個陣列的每一個元素的地址。

因此,對於您的問題, 可能計算得到a[2][-2]的元素地址為 a+2*4 + (-2) = a + 6 = a + 1*4 + 2

它的地址與元素a[1][2]的地址一樣,也就是說a[2][-2]與a[1][2]實際上是同一個元素。因此輸出6,這是正常的現象。

12樓:匿名使用者

著因該是 錯誤的``````

陣列的下標是從0開始的`````

不可能有 -2;

有什麼不懂 你可以給我簡訊```

13樓:匿名使用者

我想那是一個錯誤,這是明顯的陣列越界~ 學這麼長時間c語言,我從來就沒有見過~

14樓:5舍

確實很奇怪,應該是錯的.

15樓:匿名使用者

應該是寫錯了吧。沒見過這樣的

c語言中陣列的下標可以是字元嗎?代表什麼意思?

16樓:匿名使用者

c語言陣列的下標只能是合法的整型值。

當下標為字元時,有兩種可能:

1 以字元常量作為下標。如內a['a'];表示'a'的ascii碼對容應的陣列偏移量。在實際應用中不常見,但是從語法上來說是合法的。

2 字元本身為變數。如

int i;

int a[100];

for(i = 0; i < 100; i ++)printf("%d\n", a[i]);

這裡的a[i],下標就是i,本質上i是一個變數,訪問的時候是根據變數值進行訪問對應元素的。

17樓:匿名使用者

下標來是一個數字,一般都是這樣的。

自char 在c語言中,也算一個數吧,比如,你會發現字元'a'和其對應的ascii碼98(??),所以這樣子用是可以的。

不過,切記,char的範圍,它在-128~128之間,如果,沒有使用好,比如ch++的,導致溢位,那可是會一直迴圈下去的。

18樓:匿名使用者

可以的代表 字元對應的整型值

如 'a' 對應是 65

但是 使用字元 需要注意它的範圍

19樓:匿名使用者

ch是變數名。

在定義陣列的時候[ ]中必須是確定的整數,而在引用時可以是變數名,但是不能越界

s[ch]表示陣列第ch+1個元素

20樓:匿名使用者

不能是字元,ch應該是個int的變數,你可以在上面仔細找找。

c語言中二維陣列下標問題,C語言中二維陣列下標問題

a可以理解為二重指標,a 0 理解指標,a 0 0 是對這個地址進行訪問了 其實回 的意義 可以理解成 a i 其實就相當於 a i 所以原答來的就相當於 a i j 的優先順序比 的高 所以外面那個括號可以去掉 就變成了 a i j 明白了嗎?這裡a指的是整個陣列,而a 0 指二維陣列第一行的元素...

關於c語言動態陣列,關於C語言動態陣列

採納我吧,給你費了好大勁啊 include include include const int maxsize 100 templateclass linlist template class node template node node linlist entry entry template ...

C語言陣列

0650,a正確,選a。元素組成了陣列,陣列的定義為 int a 10 其中 int 為型別,即整型 還有字元型 char 和float 實型等 a 為陣列名 為下標符號,裡面的數字常量為 陣列的第幾號成員元素。例如 a 0 為 陣列a 10 的第一號成員元素。這裡有點要注意的是,陣列元素下標值是從...