❶ c語言多維數組
&multi[0]不等於multi[0],
multi也不等於multi[0],
multi[0]是一維指針。
multi是一個二維指針。
multi[0][0]表示一個具體的int值。
你用%u輸出的結果實際上都是輸出了multi[0][0]的值。
❷ 求C語言關於多維數組的詳細講解,急!!!
每一個[]代表一個方向 當然三維以上的數組不太容易用實體模式想像 但大概方式是一樣的
先搞明白1 2 3維對應於下標的方式 指針 地址的對應關系
比如對於int a[2][3][4]而言
a[1] a[1][1] a[1][1][1] a[1][1][3] a[1][2][0]
搞清以上幾項的地址關系
組數基本我們可以按行讀來理解[具體對應於代碼]
即 1維 從左向右讀
2維 a[2][3] 從左向右工a[][0]~a[][2] 3格 成為一行 每一行對應一個a[]
三維a[4][2][3]的在此基礎上增加到4個層面 (原來的2維對應為2*3格的一個面)
❸ 關於c語言多維數組問題
我很贊同你的理解,你學得挺扎實。你的3個問題都很好👍👍
下面只是我個人的一些看法:
1、關於二維數組的表示方式,c語言從沒有見過a[0..m][0..n]這種表示方法,因為語言本身的原因,造成a[m][n]數組不含有a[m][n]這個元素,很奇特吧!所以明確的表達方式是:int a[m][n],但其下標卻是0...m-1和0...n-1。那麼,a[0..m][0..n]是否就代表(m+1)行(n-1)列數組呢,若是,你的三個問題都是肯定的結果。
2、如果a[0..m][0..n]與int a[m][n]等價呢?這不是沒有可能的,因為沒有規定不能這樣表示。這樣的話,你的三個問題都是否定的結果。而且選項A是正確的。
3、造成這種情況的根本原因,是這本書使用了不嚴謹的表達方式,看起來不像是印刷錯誤,應該是編書人的失誤。
❹ C語言中二維數組的列總數是什麼意思
一般是說總列數,沒盯大有列總數一說,總列數就是最大好帶的列數,具體算的時候用
sizeof(c)/sizeof(c[0])得到行友則蘆數,
用sizeof(c[0])/sizeof(c[0][0])得到列數
❺ C語言 代碼 求解 多維數組和指針。
首先:
應該明確定義,對於int (*p)[3] 定義,是說:p是一個指針(*p) ,該指針指向了擁有三個元素的數組,(*p)[3] ,數據類型為int,int(*p)[3] 定義完成。(在此說明,應注意C中運算符的優先順序. (*p)[3] 和 *p[3] 是有很大區別的)。
其次:
int (*p)[3]=a;目的是將a數組的地址賦予p,即指針p指向了a。
再次:
*(*(p+1)+1))表達式應該分層看。最內層p+1是說"向前指向增加1",因為p是指向了擁有三個元素的數組,所以*(p+1)的實際指向是a中的第3個元素(從0算起)的地址,*(p+1)+1又是向前增加1的指向,即a中的第4個元素,*(*(p+1)+1) 取其值,為5.
第四:
上面解釋可以這樣看,a[2][3]可以這樣理解,它的布局為:
1 2
3 4
5 6
而p指向了a, p 對a的做如下解析:
p -> 1 2 3
(p+1) -> 4 5 6
所以明白了,指針從內存的觀點沒什麼特別的,只是記錄了一個地址。p只是記錄了a的首地址。至於p定義為int (*p)[3] ,是教編譯器如何解釋某個內存地址中的內容和大小。
最後,應該說明,在C中實際不存在真實多維數組,都是線性分布於內存中。
❻ c語言 怎樣用程序知道二維數組行數和列數
比如桐褲有這樣一個二維數組: int a[3][5];
求數組元素的總數: sizeof(a) / sizeof(int)
求數組畢察列數局數簡: sizeof(a[0])/sizeof(int)
而數組行數則為 :( sizeof(a) / sizeof(int) )/ ( sizeof(a[0]) / sizeof(int) )
不知道你明白了么?
❼ 怎樣用C語言編程計算二維數組每一行和每一列數的和 麻煩測試好了發我哈!感激不盡!
#include<iostream>
float score[5][6] = { 91, 79, 83, 92, 85, 80,
95, 72, 81, 90, 86, 82,
96, 80, 90, 92, 84, 88,
88, 80, 78, 86, 84, 80,
77, 76, 86, 88, 80, 85 };
void main(void){
float sum1[5] = {0,0,0,0,0};//行的和
float sum2[6] = { 0, 0, 0, 0, 0 ,0};//列的和
for (int i = 0; i < 5; i++){
for (int j = 0; j < 6; j++){
sum1[i]+= score[i][j];
}
printf_s("%f\n",sum1[i]);
}
printf_s("\n");
for (int i = 0; i < 6; i++){
for (int j = 0; j < 5; j++){
sum2[i] += score[j][i];
}
printf_s("%f\n", sum2[i]);
}
getchar();
}
❽ C語言編寫程序,生成10行10列二維數組,分別求其每行和每列的和
這么多的答案都不採納,實在等我的嗎。輸出10行10列的數組,計算各行列的和。
#include<stdio.h>
voidmain()
{
inta[10][10];
inti,j,sum;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
a[i][j]=(int)rand()%100;
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
printf("%5d",a[i][j]);
printf(" ");
}
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<10;j++)
sum+=a[i][j];
printf("第%d行和為:%d ",i+1,sum);
}
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<10;j++)
sum+=a[j][i];
printf("第%d列和為:%d ",i+1,sum);
}
}
❾ c語言中如何獲取一個二維數組的行列數
有兩種方式:
1 二維數組的行列數在定義的時候就是確定好的,所以編程人員是知道二維數組的大小以及行列數的。 所以可以直接使用行列數的值。
為方便維護,可以將行列數定義為宏,直接調用對應的宏名作為行列值。
2 動態獲取。
對於type array[A][B];形式的二維數組,可以通過計算sizeof獲取行列數。
sizeof(array[0][0])為一個元素佔用的空間,
sizeof(array[0])為一行元素佔用的空間,
sizeof(array)為整個數組佔用的空間,
於是:
行數 = sizeof(array)/sizeof(array[0]);
列數 = sizeof(array[0])/sizeof(array[0][0]);
❿ C語言多維數組地址計算請舉例說明
一、多維數組地址的表示方法
設有整型二維數組a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
設數組a的首地址為1000,各下標變數的首地址及其值如圖所示。
C語言允許把一個二維數組分解為多個一維數組來處理。因此數組a可分解為三個一維數組,即a[0],a[1],a[2]。每一個一維數組又含有四個元素。例如a[0]數組,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。 數組及數組元素的地址表示如下:a是二維數組名,也是二維數組0行的首地址,等於1000。a[0]是第一個一維數組的數組名和首地址,因此也為1000。*(a+0)或*a是與a [0]等效的, 它表示一維數組a[0]0 號元素的首地址。也為1000。&a[0][0]是二維數組a的0行0列元素首地址,同樣是1000。因此,a,a[0],*(a+0),*a,&a [0][0]是相等的。同理,a+1是二維數組1行的首地址,等於1008。a[1]是第二個一維數組的數組名和首地址,因此也為1008。 &a[1][0]是二維數組a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因為在二維數組中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。
C語言規定,它是一種地址計算方法,表示數組a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也可以看成是a[0]+0是一維數組a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維數組a[i]的j號元素首地址,它等於&a[i][j]。由a [i]=*(a+i)得a[i]+j=*(a+i)+j,由於*(a+i)+j是二維數組a的i行j列元素的首地址。該元素的值等於*(*(a+i)+ j)。
試一下以下程序段
#define PF "%d,%d,%d,%d,%d,\n"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf(PF,a,*a,a[0],&a[0],&a[0][0]);
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}