當前位置:首頁 » 編程語言 » c語言計算多維數組長度
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言計算多維數組長度

發布時間: 2022-12-21 09:09:44

c語言中,多維數組最多是多少維我們老師說最多六十維請問為什麼

c語言默認最多是二維數組;當然如果用指針自己分配內存的話可以自行進行計算,進行更多維的表示。

原則上,C語言中數組所包含的元素個數理論上多少都行,如果要開一個很大的數組,比如int arrayint[10000][10000];在main()中聲明該數組就會使應用程序退出,但是如果把該數組的聲明放在所有函數體之外,讓它變成一個全局變數,就沒有任何限制了,想開多大的數組都可以。

(1)c語言計算多維數組長度擴展閱讀:

如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,中括弧內的索引值是從0算起的。

如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。

Ⅱ c語言中,多維數組最多是多少維我們老師說最多六十維請問為什麼

c語言默認最多是二維數組;當然如果用指針自己分配內存的話可以自行進行計算,進行更多維的表示。二維數組本質上是將數組作為數組元素的數組,稱為數組的數組。為了形象化理解二維數組,通常將二維數組寫成行和列的排列形式,通常被稱為m行n列。

1、M:二維數組中包含多少個一維數組,二維數組是第一個維度,表示行;

2、N:一個一維數組中包含多少個元素,第二維,表示哪一列。

3、格式:類型修飾符數組名稱[行號][列號]={值,值2,值3…};您可以保存行數,但不能保存列數。

(2)c語言計算多維數組長度擴展閱讀:

高維數組:

有兩個或多個下標的數組;三維數組:實體的層、行和列;

格式:類型修改器數組名稱[層號][行號][列號]={值,值2,值3…};

遍歷3D數組需要三層循環;高維數組訪問元素:數組名稱[下標][下標]…高維數組中元素的個數等於這些數的乘積;高維數組的內存佔用等於元素數量乘以單個元素所佔用的空間。

Ⅲ 如何動態構建多維數組(c語言)

兩種方法:
1.轉化為一維數組申請
2.先申請全部行首指針,再按行逐行申請

1.
a=(int *)malloc(sizeof(int),(unsigned)m*n);
使用的時候就和一般的二維數組一樣。
舉個例子給你:
#include "stdlib.h"
#include "stdio.h"
#include <malloc.h>

int main()
{
int i,j;
int n;//這個就是需要指定的行數
int (*p)[10];

scanf("%d",&n);//取得行數

//動態生成二維數組,指定列數為10,如果想改,自己該裡面
的參數,如果想定義n行2列就為: p=(int (*)[2])malloc(n*2*sizeof(int));
p=(int (*)[10])malloc(n*10*sizeof(int)); //動態申請n行10列的二維數組

for(i=0;i<n;i++)
for(j=0;j<10;j++)
p[i][j]=i*j;

for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
printf("%d,",p[i][j]);

printf("\n");
}
free(p);

return 0;
}

2.
這個也給你舉個例子吧:
#include <stdio.h>
#include <malloc.h>
main()
{
int i = 0;
int j = 0;
int line = 0;
int row = 0;
int **p = NULL;

printf("input the line of the array:\n");
scanf("%d", &line);
printf("input the row of the array:\n");
scanf("%d", &row);

p = (int **)malloc(sizeof(int *) * line);
if (NULL == p)
{
return;
}
for (i = 0; i < line; i++)
{
*(p + i) = (int *)malloc(sizeof(int) * row);
if (NULL == *(p + i))
{
return;
}
}
/*input data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
p[i][j] = i + 1;
}
}
/*output data*/
for (i = 0; i < line; i++)
{
for(j = 0; j < row; j++)
{
printf("%d", p[i][j]);
}
}
/*free every line point*/
for (i = 0; i < line; i++)
{
free(*(p + i));
p[i] = NULL;
}

free(p);
p = NULL;
}

第一種方法數組創建和釋放都比較簡單

Ⅳ c語言怎麼獲取數組的長度

c語言中,定義數組後可以用sizeof命令獲得數組的長度(可容納元素個數)

如:

{
intdata[4];
intlength;
length=sizeof(data)/sizeof(data[0]);//數組占內存總空間,除以單個元素占內存空間大小
printf("lengthofdata[4]=%d",length);//輸出lengthofdata[4]=4
}

但,通過傳遞數組名參數到子函數中,以獲得數組長度是不可行的。如:

intgetLength(int[]a){
intlength;
length=sizeof(a)/sizeof(a[0]);//這樣是錯誤的,得到的結果永遠是1
returnlength;
}
因為,a是函數參數,到了本函數中,a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這里只是告訴函數:一個數據存儲空間首地址),所以,sizoef(a)的結果是指針變數a占內存的大小,一般在32位機上是4個位元組。a[0]是int類型,sizeof(a[0])也是4個位元組,所以,結果永遠是1。

因此,獲得數組長度,只能在數組定義所在的代碼區中,採用以上方法,才可以達到效果。

拓展資料:

數組特點:

  1. 數組是相同數據類型的元素的集合。

  2. 數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。

  3. 數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。

對於VB的數組,表示數組元素時應注意:

  1. 下標要緊跟在數組名後,而且用圓括弧括起來(不能用其他括弧)。

  2. 下標可以是常量,變數,或表達式,但其值必須是整數(如果是小數將四捨五入為整數)。

  3. 下標必須為一段連續的整數,其最小值成為下界,其最大值成為上界。不加說明時下界值默認為1。

Ⅳ c語言多維數組指針求解 希望高手每行注釋一下 謝謝

樓主你好~
在解釋那些煩人的printf之前,我們來理清幾個概念。

1),數組,這只是一種表現方式,他指的是一類已知數據類型在內存中連續排布的一種表現方式,記住這個連續排布,它是數組的本質。
2),數組的表現形式一般為a[n],不要被他的樣子迷惑,事實上[]這個不應該被叫成方括弧,應該是數組元素的取值運算符,例如int a[3]其實是*(a+3)的意思,而*(a+3)則表示a+3*sizeof(int),這個元素在實際內存中跳轉了3*sizeof(int)的實際長度。
3),一個內存地址實際上是一連串2進制數,根據機器的架構,長度也不一樣,例如80386機器,一般實際內存地址是一個32位無符號整數,注意,就是個整數,所以使用%d輸出的時候是可以被輸出的。

OK,理解了上面,下面的printf就很簡單了:

printf("%d,",a);
printf("%d,",*a);
printf("%d,",a[0]);
printf("%d,",&a[0]);
printf("%d\n",&a[0][0]);
// 以上5個全部輸出數組a的首地址,也就是a這個數組在內存中的位置,
// 樓主截圖中是在內存中第1244952個位置,可以這么理解
// 按照a[n] = *( a + n),很容易算出上面各個的位置:
// 頭兩個不說,第三個a[0] = *(a + 0) = *a = a
// 這里注意為什麼*a = a,因為a的數據類型是int**。
// 第四個&a[0] = &*(a + 0) = a
// 第五個&a[0][0] = &*(*(a+0)+0) = &*(*a + 0) = &**a = *a = a

printf("%d,",a+1);
printf("%d,",*(a+1));
printf("%d,",a[1]);
printf("%d,",&a[1]);
printf("%d\n",&a[1][0]);
// 以上幾個全部輸出a[1][]的首地址,也就是元素{4}的地址
// 第一個a+1,就是a的首地址+1*sizeof(int[4]),也就是
// a+1*4*sizeof(int)

// 1244952+1*4*4 = 1244968
// 其餘的跟上面那一堆一樣

printf("%d,",a+2);
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
// 以上幾個全部輸出a[2][]的首地址,也就是元素{8}的地址
// 第一個a+2,就是a的首地址+2*sizeof(int[4]),也就是
// a+2*4*sizeof(int)
// 1244952+2*4*4 = 1244984
// 其餘的跟上面那一堆一樣

printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
// 這兩個跟第二堆一樣
// a[1]+1也就是元素{5}的位置
// a[1]+1 = *(a+1)+1 = a + 1*4*sizeof(int) + 1*sizeof(int) =
// 1244952 + 1*4*4 + 1*4 = 1244972

printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
// 這兩個就是輸出數組元素了
// *(*(a+1)+1) = *(a[1] + 1) = a[1][1] = 5

請追問~

Ⅵ c語言二維數組求長度的問題

二維數組int a[10][10]由10個一維數組int[10]構成,每個一維數組的長度都是10,總長度是100。

Ⅶ C語言多維數組

&multi[0]不等於multi[0],
multi也不等於multi[0],
multi[0]是一維指針。
multi是一個二維指針。
multi[0][0]表示一個具體的int值。
你用%u輸出的結果實際上都是輸出了multi[0][0]的值。

Ⅷ C語言多維數組問題

#include<stdio.h>
voidmain(){
inta[5]={1,2,3,4,5},//---逗號
b[4]={6,7,8,9};//---上一句分號結束了。b[]要重新定義;int;或者前面改成逗號
int*p,*q;//----指針也沒定義
//*p=a------這種寫法也是錯的;p的值是一個地址;*p的值是p所對應地址的值;
p=a;//把a的地址給p
q=b;//同上
p+=2;//p+2;地址向後移兩位;指向a[2];
q+=3;//同上;指向b[3]----9

*p=*(q)+3;//a[2]=b[3]+3----12
q--;//指向b[2]
*(q-1)=*(p+1)-5;//前面還使用了中文括弧;b[1]=a[2+1]-5
printf("%d,%d ",*p,*q);//*p=a[2]=12;*q=b[2]=8

}

……

Ⅸ 求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語言 代碼 求解 多維數組和指針。

假如你這樣寫*((p+1)+1);你覺得對嗎?p+1是指a數組的第二行起始地址,*(p+1)才是指第二行第0列的地址,*(*(p+1)+1)第一個1是以一維數組的長度為單位的,既p每加1,地址就增加3個int位元組,而第二個1就是以一個int位元組移動的。
*(4+1)這里的*是不是應該理解為四則運算裡面的乘號,前面應該還有個被乘數吧。