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

c語言十多維數組教學

發布時間: 2023-01-12 07:18:29

1. c語言如何創建多維數組

什麼意思?
能具體點嗎?
其實,和一維的不是一樣的嘛,
多維的,就是將一維的,比如,你建一個一維的長12的整型數組,
完全可以看成是長3寬4的二維數組啊,
如果你想實現動態的話,我想到有二種方法,
一種,你用宏弄一個比較大的數組,然後用變數來標其有效部分.
另一種,可以根據你所要創建的大小動態的malloc.這個,就要先了解要建的大小.如果重新建的話,要free原來的,新分配新的空間.

2. 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中實際不存在真實多維數組,都是線性分布於內存中。

3. c語言多維數組

比如a[2][3][4]這個三維數組,你要是畫出來的話,他的for循環是三層的。
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
}}
你變換一個第一維的,需要變換三個二維和四個三維的。

4. 求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格的一個面)

5. c語言如何實現多維整型數組的復制

memcpy(目的地址,源地址,位元組數)
由於數組元素為連續內存存放
可以使用此函數,將源地址的內存內容,復制到目的地址去,位元組數為sizeof(數組名)

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

#include
"stdio.h"
void
main()
{
int
a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
//
定義一個3行4列的二維數組
printf("%d,",a);
//
輸出數組a
的首地址
printf("%d,",*a);
//
同上
printf("%d,",a[0]);
//
把a[0]看成一個數組名,則a[3][4]就相當於一維數組了,所以也是首地址
printf("%d,",&a[0]);
//同上
printf("%d\n",&a[0][0]);
//
a[0][0]是值,所以&a[0][0]也是取首地址
printf("%d,",a+1);
//
第一行的首地址
printf("%d,",*(a+1));
//
同上(理由跟輸出a[0]差不多)
printf("%d,",a[1]);
//
同上
printf("%d,",&a[1]);
//
同上
printf("%d\n",&a[1][0]);
//
同上
printf("%d,",a+2);
//
這些都跟a+1以下的一樣的原理
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}

7. 關於C語言多維數組問題

#include<stdio.h>
void main()
{int i,j,k;
int a[2][2][2]={1,2,3,4,5,6,7,8};
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf("%d",a[i][j][k]);
}

8. C語言關於多維數組的問題;字幅有限;請看問題補充;謝謝了

數組的輸入輸出格式不是固定的,是要自己具體定義的,也就是說,既可以按行輸出,也可以按列輸出,也可以按對角線輸出~~~等等,當然,它的確是按行存儲的,由上至下先存儲完第一行的所有元素,接著再存儲下一行的所有元素,你舉的程序例子是按行輸出的,但就像樓上所說的,是無法通過編譯的,因為你沒有指明你要輸出的數組元素,編譯器是會報錯的,把這個語句printf(%3d);換成printf("%3d",a[i][j]);就可以了~~~

9. C語言 多維數組課程設計

其實就是用一維數組實現的,例如 int a[m][n],可以定義一個 aa[m*n], 再用一個函數實現a[i][j]; 即aa[i*n+j]=a[i][j] ;

int m,n,a[MAX]; /*全局變數 */
void arrF(int i,int j,int x) /*賦值的函數,先假設i,j是 非負的 */
{
if(i<m && j<n) a[i*n+j]=x;
else printf("overflow!\n');
}

數組aa[]除了預設的大一點,還可以動態分配,即調用mallloc(): int *a=(int*)malloc(sizeof(int)*m*n);
( malloc函數包含再stdlib.h中).

10. c語言定義一個10維數組,並用scanf初始化,然後找到其中最小與最大的數輸出

#include <stdio.h>
void main()
{
int array[10];
int i = 0;
int minPos = 0;
int maxPos = 0;
for(i = 0; i < 10; i++)
scanf("%d", &array[i]);
for (i = 1; i < 10; i++)
{
if (array[i] < array[minPos])
minPos = i;
if (array[i] > array[maxPos])
maxPos = i;
}
printf("The min value : %d\nThe max value : %d\n", array[minPos], array[maxPos]);
}