簡體   English   中英

用一些零初始化一個int數組

[英]Initialize an int array with some zeros

我做了一個簡單的排序程序,其中我初始化了如下數組。

int a[]={9,4,7,8,5,2,6,1,0,3};

但是我的排序函數將數組a [0]排序為a [7]並將0像'\\ 0'一樣對待並停止。 如果我將0放在其他某個地方,則排序剛好為0,並忽略了數組的其余部分。 C在這里對待0和'\\ 0'是否相同?

我的氣泡排序程序如下。

#include<stdio.h>
#include<conio.h>

int main()
{
int a[]={9,4,7,8,5,2,6,1,0,3};

void bubble_sort(int *a);
void print(int *a);

bubble_sort(a);

print(a);

getch();

return 0;
}

void bubble_sort(int *a)
{
int i=0,j,t,n;
for(i=0;a[i]!='\0';i++)
{
    n=0;
    for(j=1;a[j]!='\0';j++)
    {
        if(a[j-1]>a[j])
        {
            t=a[j-1];
            a[j-1]=a[j];
            a[j]=t;
            n++;
        }
    }
    if(n==0)
    {
         break;
    }
}
}

void print(int a[])
{
int i=0;

for(i=0;a[i]!='\0';i++)
{
    printf("%d ",a[i]);
}

printf("\n");
}

根據定義, '\\0'0 您需要將數組的長度傳遞給排序函數,否則,請選擇其他整數值作為終止符,並確保切勿將其用於其他任何內容。

字符'\\0'正好等於0。您將需要將數組長度傳遞給排序算法,然后使用它。

C在這里對待0和'\\ 0'是否相同?

是。 這是因為兩者均為零。 就像其他人提到的那樣,或者您傳遞數組的長度以起作用或使用為數組選擇的另一個定界符,您需要確保該定界符不會包含在數組中。

編輯:@Jim Balter,感謝您的澄清。

'\\ 0'為NULL字符 .NULL的ASCII碼為0。

a[i]!='\0' is equivalent to a[i]!=0

因為將'\\ 0'類型轉換為其ASCII值(整數)。

因此,當當前元素為零時,循環停止。

為了解決這個問題,請傳遞一個額外的參數: array size

bubble_sort(a,sizeof(a)/sizeof(int));
print(a,sizeof(a)/sizeof(int));

bubble_sort函數更改為:

void bubble_sort(int *a,int sz)
{
    int i=0,j,t,n;
    for(i=0;i<sz;i++)
    {
        n=0;
        for(j=1;j<sz;j++)
        {
        ...................................

打印功能更改為:

void print(int a[],int sz)
{
    int i=0;
    for(i=0;i<sz;i++)
    {
                 .......................

請注意:

在C ++中,幾乎不可能通過衰減指針(int * a或int a [])來計算數組的大小。 因此,總是有一個額外的參數: array的大小與array一起傳遞。

但是,每當將字符數組傳遞給函數時,就像在C / C ++中一樣,簡單地迭代該數組直到遇到NULL字符,該字符串將存儲在字符數組的連續元素中,並以NULL字符終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM