『壹』 關於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]);
}
『貳』 如何動態構建多維數組(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語言如何創建多維數組
什麼意思?
能具體點嗎?
其實,和一維的不是一樣的嘛,
多維的,就是將一維的,比如,你建一個一維的長12的整型數組,
完全可以看成是長3寬4的二維數組啊,
如果你想實現動態的話,我想到有二種方法,
一種,你用宏弄一個比較大的數組,然後用變數來標其有效部分.
另一種,可以根據你所要創建的大小動態的malloc.這個,就要先了解要建的大小.如果重新建的話,要free原來的,新分配新的空間.
『肆』 C語言 多維數組的問題 新手 數組學的很模糊 請大神詳解
樓主你好,board是一個二維數組,你得了解board[3]是一個指向數組的數組,然後board的數組名就是一個指向數組的數組的首地址,你取它的地址就是board[0]的地址,推薦你看下《C和指針》,畢竟這些是一連串的知識
『伍』 C語言中怎樣把一個多維數組排序
同意一樓方法,講二維數組存到一維數組中,然後用qsort排序,再存到二維數組當中
代碼敲了一下,發現C語言快忘光了
#include <stdio.h>
#include <stdlib.h>
int comp(const void *a , const void *b){
return *(int *)b - *(int *)a; //這是b-a,如果是a-b就是從小到大排序
}
int main(){
int a[3][3];
int b[9];
int n;
int i , j , k;
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
scanf("%d",&a[i][j]);
b[k++] = a[i][j]; // k ++別看漏
}
qsort(b,9,sizeof(int),comp);//qsort函數很簡單的,看看就會,不怕麻煩,comp函數是指定排序是從小到大還是從大到小
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
a[i][j] = b[k++];
printf("%d",a[i][j]);
}
system("pause");
return 0;
}
qsort看不懂再給你個網路的鏈接
http://ke..com/view/982231.htm
自己再敲一次吧,代碼是敲出來的,多練練
ps:那個int n是多餘的,你的代碼測試了,可以
『陸』 求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語言中如何用多維數組實現輸入一個班30名學生的姓名,學號和5門成績
#include "stdio.h"
#define N 100
void main()
{
char stu_name[N][20]={""};
char stu_id[N][10]={""};
float stu_score[N][5]={0.0};
int stu_num=0;
int i,j;
printf("Please input the number of class:n=");
scanf("%d",&stu_num);
printf("Please input student's information:\n");
for(i=0;i<stu_num;i++)
{
printf("請輸入第%d位學生信息:\n",i+1);
printf("Please input Name:");
getchar();
gets(stu_name[i]);
printf("Please input ID:");
getchar();
gets(stu_id[i]);
for(j=0;j<5;j++)
{
printf("請輸入第%d門成績:",j+1);
scanf("%f",&stu_score[i][j]);
}
}
}
『捌』 c語言三維數組怎麼用的
在c語言中,多維數組的存放規律都是第一維下標變化的最慢,越往後維數越高,下標變化越快,例如:對於三位數組a[2][2][2],其賦值順序就是:
a[0][0][0]
a[0][0][1]
a[0][1][0]
a[0][1][1]
a[1][0][0]
a[1][0][1]
a[1][1][0]
a[1][1][1]
總結的說,就是「維數最高優先存儲」
至於什麼情況用三維數組,這要看你編程思想了,當你想編的程序抽象成三維的東西,就用三維數組來表示,就如矩陣似的,我們把矩陣看成是一個圖,二維的,所以用了二維數組
希望可以幫助你
『玖』 c語言中的二維數組
C 語言中的多維數組(multidimensional array)其實就是元素為數組的數組。n 維數組的元素是 n-1 維數組。例如,二維數組的每個元素都是一維數組,一維數組的元素當然就不是數組了。
多維數組聲明時,每個維度用一對方括弧來表示:char screen[10][40][80]; // 一個三維數組
數組 screen 包含 10 個元素,從 screen[0] 到 screen[9]。每個元素又是一個二維數組,它有 40 個元素,這 40 個元素均是一維數組,然後每個一維數組內都有 80 個字元。整體來說,screen 數組有 32000(10×40×80)個 char 類型元素。
想要獲取該三維數組 screen 內的某個 char 元素,必須指定 3 個索引值。例如,下面的語句把字元Z寫入該數組的最後一個元素位置:screen[9][39][79] = 'Z';