本文目錄一覽:
- 1、在C語言中定義二維數組long a[3][5],則數組佔多少位元組的存儲空間?
- 2、C語言數組中為什麼寫a[5]={0},這樣寫對嗎?不是說方括弧裡面的數字和花括弧裡面的元素個數相同
- 3、c語言,二維數a,大小為3*5
- 4、在C語言中,數組a[5],數組名a可以a++嗎
在C語言中定義二維數組long a[3][5],則數組佔多少位元組的存儲空間?
c語言中long佔4個位元組,所以longa[3][5]佔4*3*5=60個位元組
從元素角度理解a代表a[0][0];從二維數組理解a代表a二維數組名,即二維數組首地址;從一維數組角度理解a代表a[0]即二維數組第一行看作一個一維數組,a[0]為這個一維數組的首地址;
a[1]從二維數組看代表a[1][0]是元素,從一維數組角度看代表二維數組第二行的首地址和上面a[0]一樣,
C語言數組中為什麼寫a[5]={0},這樣寫對嗎?不是說方括弧裡面的數字和花括弧裡面的元素個數相同
a[5]={0}這種寫法是對的,C語言對數組初始化的值個數可以少於數組元素個數,當初始化值的個數少於數組元素個數時,前面的按序初始化相應值, 後面的初始化為0(全局或靜態數組)或為不確定值(局部數組)。
c語言,二維數a,大小為3*5
首先明確概念:
a為二維數組名,此數組有3行5列, 共15個元素。
但也可這樣來理解,數組a由三個元素組成:a[0], a[1], a[2]。
而它們中每個元素又是一個一維數組, 且都含有5個元素。
a代表二維數組的首地址。也是二維數組第0行的首地址。
所以 a[2]和a+2都是二維數組第2行的首地址。//———————你的問題1,2
在二維數組中,我們還可用指針的形式來表示各元素的地址。所以a[0]=*(a+0);
所以*(a+2)也是a[2]即二維數組第2行的首地址 ///—————————你的問題3
根據以上推論:
*(*(a+2)+3) == *(a[2]+3)即在第2行首地址上偏移3,那麼就是a[2][3]的值 //——–你的問題4
(2)如果輸出a和a[0]的值是否相等,為什麼,各代表什麼含義。
由上:a代表二維數組的首地址。也是二維數組第0行的首地址。
可得,如果輸出他們的值,是一樣的。
在C語言中,數組a[5],數組名a可以a++嗎
不能。因為變數指針可以遞增,而數組不能遞增,數組可以看成一個指針常量。代碼修改:
#includestdio.h
int main(void)
{
int array[5]={2,4,5,23,5};
int *p,i;
p=array;
printf(“請輸入是五個數:\n”);
for(i=0;i5;i++)
scanf(“%d”,array[i]);
printf(“\n”);
printf(“輸出五個數:\n”);
//for(i=0;i5;i++)
printf(“%d\n”,*(p++));
}
擴展資料:
指針運算
1、指針變數加/減一個整數
例如:p++,p–,p+i等。
C語言與C++語言規定,一個指針變數加/減一個整數是將該指針變數的原值(是一個地址)和它指向的變數所佔用的內存單元位元組數相加或相減。這樣就保證了p+i指向p下面的第i個元素。
2、指針變數賦值
C語言與C++語言規定,可以將一個變數或一個函數的入口地址賦值給相應的指針變數。
例如(假設p是相應的指針):
p=a;
p=max;(max為已經定義的函數)
3、指針變數相減
如果兩個指針變數指向同一個數組的元素,則兩個指針變數之差是兩個指針之間的元素個數。
注意,指針變數相加無實際意義。
4、指針變數比較
如果兩個指針變數指向同一個數組的元素,則可以進行比較。指向前面元素的指針變數小於指向後面元素的指針變數。
參考資料:
百度百科-指針運算
原創文章,作者:CCWS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131978.html