c語言二維數組一維
Ⅰ 請問c語言中如何把一個二維數組用一維數組表示出來
定信遲歲義a[][4]為一個4列的二維數組後,a[2]是*(a+2),這里a是一個指向4個整型的數組指針;
a[2]也可以理解為&a[2][0],因為數組a其實只定義了一行,所以&a[2][0]已經越界了,不過在c語言中越界訪問是不會報錯的,所以a[2][0]的地址比a[0][0]的地址偏移了2行,也就是8個整型,也是32個位元組。旦歲這樣理解為滑睜&a[0][0]+32也可
Ⅱ C語言中二維數組的第一維長度是什麼意思
二維數組,也就是一組數據,有兩個維度行和列。比如
int
a[M][N];
定義了一個M行N列的數組,總元素個數為M*N。
其第一維長度,也就是總羨譽的行數州派大,在C語言中,就是定義中的M。冊豎
類似的,第二維長度,也就是每行元素個數。在C語言中就是定義中的N。
Ⅲ c語言二維數組變成一維數組的通項公式
對二維數組拆羨吵用兩次循環,將其賦值到一維數組就夠了。
舉個例子,二維數組a[N][M],一維數組b[]
編寫主函數部分:
int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
b[k++]=a[i][j];
擴展旅侍資料:
反之一維轉二維
#include <stdio.h>
#include <stdlib.h>
#define ROW 3
#define COL 2
int main(int argc, char *argv[])
{
int arr1D[] = {1,2,3,4,5,6};
int arr2D[ROW][COL];
int i,j;
//一維維整型數組轉換為二維整型數組
for(i=0;i<ROW;i++)
{
for(j=0;j<派飢2;j++)
{
arr2D[i][j]=arr1D[i*COL+j];
}
}
//二維整型數組列印顯示
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf("%d ", arr2D[i][j]);
}
printf(" ");
}
system("pause");
return 0;
}
Ⅳ C語言設計程序二維數組變一維怎麼變
提供一個最簡單的辦法:設原二維數組是int a[N][M];,再聲明一個與a的元素類型兼容的指針,如int *p;,然後將a強制為(int *)型賦給p,即p=(int *)a;。這樣操作後,用a仍然對原數組能進行二維數組操作,而用p就可按一維數組對原數組進行操作了(相當於將二維數組變成了一維數組p)。驗證代碼如下:
#include"stdio.h"
#defineN畝基裂3
#defineM4
intmain(intargc,char*argv[]){
inta[N][M]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},i,j,*p;
p=(int*)a;//將二維數組鋒早a變成一維數組p
for(i=0;i<N;i++){
for(j=0;j<M;printf("%3d",a[i][j++]));//用數組名a仍然按二維數組操作
printf(" ");
}
printf(" ");
for(j=M*N,i=0;i<j;printf("%3d",p[i++]));//用p則按一迅閉維數組操作
printf(" ");
return0;
}
運行結果如下圖:
Ⅳ c語言 二維數組,一維數組
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain()
{
inti,k,a[5][5],b[25],j=0;
doublec=0;
srand(time(NULL));
printf("產生的隨機數組是: ");
for(i=0;i<喚行5;i++)
{
for(k=0;k<5;k++)
{
談鏈源a[i][k]=rand()%90+10;
printf("%d",a[i][k]);
c+=a[i][k];
含態}
printf(" ");
}
c=c/25;
//printf("%lf ",c);
printf(" 新的數組為: ");
for(i=0;i<5;++i)
{
for(k=0;k<5;k++)
if(a[i][k]<c)
{
b[j]=a[i][k];
j++;
}
}
for(i=0;i<j;i++)
printf("%d",b[i]);
return0;
}
for (i = 0; i < 25; ++i) 這里循環錯了 ,i<5
Ⅵ c語言中能把一個二維數組的值賦給一個一維數組嗎
當然可以了。
例如:
#include<stdio.h>
voidmain()
{
inti,j,k=0,a[2][2]={1,2,3,4},b[4];
for(i=0;i<2;i++)
for(j=0;j<槐仿2;j++)
{b[k]=a[i][j];k++;}
for(k=0;k<4;k++)
printf("%d",b[k]);
}
運行結果:
就是將一個2×2的二維數組賣蘆的值按順序賦給中明帶一個一維數組。
Ⅶ C語言如何將二維數組轉化為一維數組
一維數組:
類型說明符
數組名[常量迅蠢表達式]
例如
int
a[10]它表示數組名為a,此數組有10個元素答昌稿
二維數組:
數組名[下標][下標]
如
a[2][3]
下標可以是清孝整形表達式如a[2-1][2*2-1]不能寫成a[2,3]
a[2-1,2*2-1]
Ⅷ c語言怎麼把二維數組的字元串給到一維數組
按元素賦值:
遍歷一維數組,並將每個元素賦值到二維數組的對應元素上。
或者遍歷二維數組,將每個元素賦值為一維數組對應值上。
優點為操作靈活,可以按照需要任意賦值。
2 當一維數組和二維數組類型相同,而且賦值順序與一維數組中的存儲順序完全相同時,可以用memcpy的方式,直接一次性賦值。
如一維數組為a,二維數組為b,基礎類型為TYPE,需賦值元素個數為n,可以調用
memcpy(b,a,sizeof(TYPE)*n);
該方法有點為操作簡單,執行效率高。
不過所需滿足的前提條件多。在滿足上述所有條件時,用memcpy的方式更為簡單。
個就是apply的一個巧妙的用處,可以將一個數組默認的轉換為一個參數列表([param1,param2,param3] 轉換為 param1,param2,param3) 這個如果讓我們用程序來實現將數組的每一個項,來裝換為參數的列表。
Ⅸ C語言一個二維數組如何轉換成一個新的一維數組
當然可以了。
例如:
#include<stdio.h>voidmain(){inti,j,k=0,a[2][2]={1,2,3,4},b[4];for(i=0;i<2;i++)for(j=0;j<2;j++){b[k]=a[i][j];k++;}for(k=0;k<4;k++)printf("%d",b[k]);}
運行結果:
就是將一個2×2的二維數組的值按順序賦給一個一維數組。
Ⅹ (c語言程序執行結果分析題)按行優先的方式把一個二維數組的元素存入一個一維數組中,並輸出
#include <stdio.h>
#include <malloc.h>
int main()
{
//這是一個二維數組
int arr[2][3] = {
{1,2,3},
{4,5,6}
};
//獲帆陵取數組的尺寸和行列數:
int len = sizeof(arr) / sizeof(arr[0][0]);
int row = sizeof(arr) / sizeof(arr[0]);
int column = len / row;
//知道了長度就可以使用calloc創建一個給定長度的數組(但用完記得要free)
int* new_arr = (int*)calloc(len, sizeof(int));
//將二維數組內的數值寫入一維數組
for (int i = 0; i < len; i++)
{
//確定行號 用索引 i 除以(每行中有幾列) 得到行數
int y = i / column; // 如 第5個數 / 每列有3個,則為 4/3= 「1」(第二行)
坦轎畝 //確定列
int x = i % column; // 如 第5個數 % 每列有3個,則為 4/3= 1餘 「1」 (第二個)
//將該數值寫入新數組
if (!new_arr) { free(new_arr); return 1; } //new_arr為空的驗證,如果出現此錯誤則 return 1
else {
new_arr[i] = arr[y][x];
}
}
//輸出新數組的數字
for (int i = 0; i < len; i++)
{
讓森 if (!new_arr) { free(new_arr); return 1; }
else {
printf("%d ", new_arr[i]);
}
}
free(new_arr);
}