簡體   English   中英

C 編程:參數:無法轉換為 int*

[英]C Programming : Parameter : Can't convert to int*

我是新來的,我有一個問題。

我正在做關於過程和結構的 C 編程作業。

所以我想聲明一個結構數組,然后把它作為別名。 這是代碼:

typedef struct Mahasiswa
{
    int NIM;    
    char NamaMhs[16];
    char KodeMK[6];
    char Nilai;
}TabMhs[100];
TabMhs M; //Alias

我想使用這個結構作為另一個過程的參數:

這是程序:

void SortDataMhs(struct Mahasiswa M[Nmaks],int n);

這是過程調用:

SortDataMhs(&M,n);

但我收到一個錯誤:[錯誤] 無法將 'Mahasiswa( )][100]' 轉換為 'Mahasiswa ' for argument '1' 'void SortDataMhs(Mahasiswa*,int)'

有什么幫助嗎? 很抱歉問這樣一個新手問題。 因為我是編程新手:)

這個結構數組的聲明,即:

typedef struct Mahasiswa
{
    int NIM;    
    char NamaMhs[16];
    char KodeMK[6];
    char Nilai;
}TabMhs[100];
TabMhs M; //Alias

不是很好的做法。 您可以在此處閱讀更多相關信息。

現在,下面的代碼更具可讀性和可理解性:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct Mahasiswa
{
    int NIM;    
    char NamaMhs[16];
    char KodeMK[6];
    char Nilai;
}TabMhs;

TabMhs m[100];

void ss(TabMhs* m, int n){ // `m` is the pointer to array of structures and `n` is the number of elements in that array.
    for(int i=0; i<n ; i++){
        printf("%d\t%s\t%s\t%c\t%d\n", m[i].NIM, m[i].NamaMhs, m[i].KodeMK, m[i].Nilai, n);
    }
}

int main(){
    m[0].NIM = 0;
    strcpy(m[0].NamaMhs, "m0nama");
    strcpy(m[0].KodeMK, "m0kod");
    m[0].Nilai='a';

    m[1].NIM = 1;
    strcpy(m[1].NamaMhs, "m1nama");
    strcpy(m[1].KodeMK, "m1kod");
    m[1].Nilai='b';

    ss(m,2);

    return 0;
}

但是假設明天您的結構數組需要多於(或少於)100 個元素,在這種情況下,您可以通過刪除語句 TabMhs m[100] 並將其替換為以下內容來使該數組動態化:

int main(){

    int n = 10;
    TabMhs* m = malloc(sizeof(TabMhs) * n);

    /* rest of the code remains same */

    free(m);
}

暫無
暫無

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

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