當前位置:首頁 » 編程語言 » c語言多個數組

c語言多個數組

發布時間: 2022-12-22 22:33:56

c語言中,多維數組和多個數組,哪一種更效率

如果你學過編譯了你就知道多維數組的訪問比一位數組在編譯時要更加復雜,在符號表中需要保存的內情向量也會跟大。就用你給出的例子說明:a[i][j]實際對應的內存偏移地址是由base(a)+(i*array(a,1)+j)*sizeof(a)這個公式計算得來的。其中base(a)表示數組a的基地址,而array(a,1)表示數組a的一維維度大小。而b[i]對應的偏移地址則是由base(b)+i*sizeof(b)。而對數組元素的訪問實際就是對數組元素所對應的內存偏移地址的訪問。由此可見數組每多一維,在訪問其變數時就得多做一次乘法,並且編譯後生成的中間代碼也會更長,效率自然要低。
但是,我個人推薦沒有必要非得為這點效率而迴避多維數組。其一,是因為在連續訪問多維數組時,你的編譯器會為你做優化,從而大大提高訪問效率,優化後的效率損失可以忽略不計。其次,如果數組是在堆上分配的,那就是一片連續的內存空間。比幾片零散的空間更加規整。再者,如果你寫有關多維矩陣的程序。固執的使用低維數組會大大增加程序復雜度並降低可讀性,甚至效率反而會降低。總之,我們還是不要撿了芝麻,丟了西瓜的好。

㈡ c語言中怎樣給指針中添加多個數組的元素

數組指針(也稱行指針)
定義
int
(*p)[n];
()優先順序高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。
如要將二維數組賦給一指針,應這樣賦值:
int
a[3][4];
int
(*p)[4];
//該語句是定義一個數組指針,指向含4個元素的一維數組。
p=a;
//將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]
p++;
//該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
所以數組指針也稱指向一維數組的指針,亦稱行指針。
指針數組
定義
int
*p[n];
[]優先順序高,先與p結合成為一個數組,再由int*說明這是一個整型指針數組,它有n個指針類型的數組元素。這里執行p+1時,則p指向下一個數組元素,這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指針變數可以用來存放變數地址。但可以這樣
*p=a;
這里*p表示指針數組第一個元素的值,a的首地址的值。
如要將二維數組賦給一指針數組:
int
*p[3];
int
a[3][4];
p++;
//該語句表示p數組指向下一個數組元素。註:此數組每一個元素都是一個指針
for(i=0;i<3;i++)
p[i]=a[i]
這里int
*p[3]
表示一個一維數組內存放著三個指針變數,分別是p[0]、p[1]、p[2]
所以要分別賦值。

㈢ c語言怎麼把一個字元數組分成多個數組

可以使用strtok函數把一個字元數組分解成多個字元數組。

1、strtok函數:
原型:char *strtok(char s[], const char *delim);
功能:將一個字元串分解為一組字元串,s為要分解的字元串,delim為分隔符字元串;
說明:當strtok函數在參數s的字元串中發現參數delim中包含的分割字元時,則會將該字元改為 字元。在第一次調用時,strtok()必需給予參數s字元串,往後的調用則將參數s設置成NULL。每次調用成功則返回指向被分割出片段的指針;
頭文件:string.h;
返回值:從字元串s開頭開始的一個個被分割的字元串。分割結束時,返回NULL。所有delim中包含的字元都會被濾掉,並將被濾掉的地方設為一處分割的節點。
2、常式:

#include<stdio.h>
#include<string.h>
intmain(){
charinput[16]="abc,d,ef,g";//待分解字元串
char*delim=",";//分隔符字元串
char*p=strtok(input,delim);//第一次調用strtok
while(p!=NULL){//當返回值不為NULL時,繼續循環
printf("%s ",p);//輸出分解的字元串
p=strtok(NULL,delim);//繼續調用strtok,分解剩下的字元串
}
return0;
}

㈣ C語言怎麼定義多個數組儲存字元串,又要求逐個輸入

可以定義一個字元型二維數組,並依次輸入。
比如輸入10個字元串,每個字元串最大長度不超過100,那麼代碼可以寫作:
char
str[10][100];
int
i;
for(i
=
0;
i
<
10;
i
++)
scanf("%s",
str[i]);//逐個輸入。
for(i
=
0;
i
<
10;
i
++)
printf("%s\n",
str[i]);//將輸入的字元串依次輸出以確認結果。

㈤ 計算機二級中c語言 一條語句可以定義多個數組什麼意思

就像這樣
int
a[4],b[4],c[4];
C的程序由若干個語句組成,一個語句就是一個命令,語句的標志符號是分號,
這條語句中定義了a
b
c三個數組

㈥ c語言循環中如何輸出多個數組

C語言輸出數組時,需要根據數組下標,或者指針移動進行輸出。

所以,一般不會用一個循環輸出多個數組,這樣操作不方便,而且降低效率。

常規的做法是,在多個循環中,各自輸出不同的數組。

示例代碼如下:

#include<stdio.h>
intmain()
{
inta[10],b[20];
inti;
for(i=0;i<10;i++)
scanf("%d",a+i);//輸入a
for(i=0;i<20;i++)
scanf("%d",b+i);//輸入b

for(i=0;i<10;i++)
printf("%d,",a[i]);//輸出a
for(i=0;i<20;i++)
printf("%d,",b[i]);//輸出b

return0;
}

㈦ 緊急!C語言多個數組問題!!!

#include<stdio.h>

int main()
{

int i,j = 0,a[7],b[7],c[7],max;
//1.聲明的數組最好初始化
for(i = 0;i < 7;i++)
{
a[i] = 0;
b[i] = 0;
c[i] = 0;
}
//2.界面可以人性化一點,方便自己和別人使用
//以下是輸入數據
for(i = 0;i < 7;i++)
{
printf("Day.%d\n",i+1);
scanf("%d%d",&a[i],&b[i]);
c[i]=a[i]+b[i];
printf("StudyTime:%d\n",c[i]);
}
//3.功能模塊也可以分清楚一點,不必一下子把什麼事情都做完
//以下是分析比較數據,和你的不太一樣,我用MAX來存儲最大的數據,用J來記錄最忙的日子
//個人認為這樣的程序更加易讀
max = c[0];
for(i = 0;i < 7;i++)
{
if(max < c[i])
{
max = c[i];
j = i;
}
}
printf("\n");
//最後的輸出沒按題目要求來,用了人性化的輸出。
if(max<=8)
printf("A Happy Week^^\n%d",0);
else
printf("The Busy Day is:%d\n Her study time is:%d\n",j, max);
return 0;
}
/*感覺像電子寵物o(∩_∩)o...建議編程的時候層次清楚一點,易讀性是相當重要的哦*/

㈧ C語言中如何用棧存儲多個二維數組

typedef struct{
int left_pos; //左邊棧頂,靠0方向

int right_pos; //右邊棧頂,靠MAXSIZE-1方向

int split_pos; //左右棧分割位置

int stack[MAXSIZE];
}DoubleStack;

初始的時候,為了能夠高效方便的讓2個棧進數據,建議把split_pos設置為MAXSIZE/2,也即中間,並初始化 left_pos,right_pos也為MAXSIZE/2;typedef struct{
int left_pos; //左邊棧頂,靠0方向

int right_pos; //右邊棧頂,靠MAXSIZE-1方向

int split_pos; //左右棧分割位置

int stack[MAXSIZE];
}DoubleStack;

初始的時候,為了能夠高效方便的讓2個棧進數據,建議把split_pos設置為MAXSIZE/2,也即中間,並初始化 left_pos,right_pos也為MAXSIZE/2;

㈨ c語言關於多個數組的排序問題

//1你沒有理解冒泡排序原理,應該和內層循環個元素交換,所以把變數i+1替換為變數j

//2strcmp函數不會用,應該傳指針,因為只有這樣才能比較兩個字元串。

#include<stdio.h>

#include<string.h>

intmain()

{

inti,j;

char*temp;char*p[6];

chara[6][6];

printf("請輸入你想比較的字元串");

for(i=0;i<6;i++)

{

p[i]=a[i];

}

for(i=0;i<6;i++)

{scanf("%s",p[i]);

}for(i=0;i<6;i++)

{

for(j=i;j<6;j++)

{

if(strcmp(p[i],p[j])>0)

{

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

}

for(i=0;i<6;i++)

{

printf("%s ",p[i]);

}

return0;

}

熱點內容
美嘉演算法口訣 發布:2025-05-16 06:03:15 瀏覽:952
c程序編譯連接 發布:2025-05-16 06:02:36 瀏覽:964
腳本魔獸 發布:2025-05-16 06:01:52 瀏覽:330
文件夾python 發布:2025-05-16 06:01:43 瀏覽:627
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396