㈠ c語言多維數組定義與初始化
二維數組定義的一般形式如下:
類型標識符 數組名【常量表達式1】【常量表達式2】;
例如:
int a[2][3];
float b[3][10];
二維數組的初始化有兩種:
(1)分行初始化,如:
static int a[2][3]={{1,2,3,},{4,5,6}};
(2)統一初始化,如:
static int a[2][3]={1,2,3,4,5,6};
㈡ C語言多維數組的賦值
循環,或者定義的時候賦值~
㈢ C語言如何定義一個N行N列的二維數組任意輸入數據
我可以肯定的告訴你,不可能在程序運行的時候決定一個二維數組的大小,因為數組的大小是
在編譯時就決定了的,不是在運行時,如果是一維的通過某些方法還可以辦到,二維的就不可
能了,拿一維的來說:
polly@nowthen:~$cattest.c
#include<stdio.h>
#include<stdlib.h>
structtest{
intnum;
intarr[0];
};
intmain()
{
structtest*temp;
intn=0;
scanf("%d",&n);
if(n>0){
temp=(structtest*)malloc(sizeof(structtest)+n*sizeof(int));
temp->num=n;
inti=0;
for(;i<temp->num;i++){
temp->arr[i]=i;
}
for(i=0;i<temp->num;i++){
printf("element%d=%d ",i,temp->arr[i]);
}
}
return0;
}
polly@nowthen:~$gcc-Walltest.c-oliu<---編譯
polly@nowthen:~$./liu<---運行
9<---輸入數組維數
element0=0
element1=1
element2=2
element3=3
element4=4
element5=5
element6=6
element7=7
element8=8
polly@nowthen:~$
就上面的C語言標准也是不支持的,多維數組的辦不到,一維的也盡量少用。
㈣ 如何動態構建多維數組(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語言的多維數組怎麼嵌套定義,以及怎麼賦值
1、使用malloc函數,先分配第一維的大小,然後再循環分配每一維的大小。
2、常式,分配3行4列二維數組:
#include<stdio.h>
#include<malloc.h>
intmain()
{
int**a;
inti,j;
a=(int**)malloc(sizeof(int*)*3);//為二維數組分配3行
for(i=0;i<3;++i){//為每列分配4個大小空間
a[i]=(int*)malloc(sizeof(int)*4);
}
//初始化
for(i=0;i<3;++i){
for(j=0;j<4;++j){
a[i][j]=i+j;
}
}
//輸出測試
for(i=0;i<3;++i){
for(j=0;j<4;++j){
printf("%d",a[i][j]);
}
printf(" ");
}
//釋放動態開辟的空間
for(i=0;i<3;++i){
free(a[i]);
}
free(a);
return0;
}
/*
輸出:
0123
1234
2345
*/
㈥ 求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格的一個面)
㈦ 數組的定義是什麼
1.數組的定義數組是由n(n≥1)個具有相同類型的數據元素a0,a1,a2,…,an-1組成的有序序列,且該序列必須存儲在一塊地址連續的存儲單元中,並用一個統一的數組名標識。
2.數組的特點(1)數組中的數據元素具有相同數據類型。
(2)數組是一種隨機存取結構,給定數組下標,就可以訪問與其對應的數據元素。
(2)數組可被看成定長的線性表,因此數組中的數據元素的個數是固定的。
2.數組分類根據數組元素ai的組織形式的不同,數組可分為一維數組、二維數組以及多維數組。
1.一維數組一維數組可被看成一個線性表或一個向量,它在計算機內存放在一塊連續的存儲單元中,在C語言中一維數組一般定義為:數組名[下標]。
2)二維數組若一維數組中的數據元素又是一維數組結構,則稱為二維數組。在二維數組中,每個數據元素aij對應一個行下標和一個列下標。因此,除邊界元素外,每個元素aij都恰好有兩個直接前驅aij-1和ai-1j,兩個直接後繼aij+1和ai+1j。開始結點a11沒有前驅結點,終端結點amn沒有後繼結點,邊界上的結點a1j(1≤j<n)、amj(1≤j<n)、ai1(1≤i<m)和ain(1≤i<m)均只有一個後繼結點或一個前驅結點,也可被看成線性表的線性表。因此,二維數組的邏輯結構是:每個元素至多有兩個直接前驅和兩個直接後繼。在C語言中,二維數組一般定義為:數組名[下標][下標]。
2)n維數組在n維數組中,每個數據元素對應n個下標,受n個關系的制約,其中任一個關系都是線性關系,也可被看作數據元素為n-1維數組的一維數組。在C語言中多維數組一般定義為:
數組名[下標]…[下標],有幾個下標就是幾維數組。
4.數組的基本操作數組在創建時就確定了組成該結構的行向量數目和列向量數目,因此,在數組結構中不存在插入、刪除元素的操作。因此,除了初始化和銷毀之外,數組通常只有兩種操作:
(1)存取(讀):給定一組下標,讀取相應的數據元素。
(2)修改(寫):給定一組下標,存取或修改相應的數據元素。
㈧ C語言多維數組
&multi[0]不等於multi[0],
multi也不等於multi[0],
multi[0]是一維指針。
multi是一個二維指針。
multi[0][0]表示一個具體的int值。
你用%u輸出的結果實際上都是輸出了multi[0][0]的值。
㈨ 定義數組 int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}} int x[][3]={1,2,3,4}
你的理解有一半是對的,有一半是錯的。對的就是你明確了兩個數組都是不確定的,錯的就是你誤以為0可以有無限個。
你要知道第一維度和第二維度都代表什麼。前面代表數組有幾行,後面代表每行有幾個元素。
如果int [][3] = {1,2,3}那麼系統知道了每行有幾個,就可以確定數組為a[1][3];
如果int [][3] = {1,2,3,4};那麼系統就確定數組為a[2][3]= {1,2,3,4,0,0};0的個數就可以被確定了。
但是如果是int [4][]={1,2,3}那麼系統就不知道每行有幾個,就沒法確定有幾個0了。
你可以試試直接定義a[]={1,2,3};是可以的。相當於a[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、造成這種情況的根本原因,是這本書使用了不嚴謹的表達方式,看起來不像是印刷錯誤,應該是編書人的失誤。