C में इस मामले में `और` की अनुमति क्यों नहीं है, लेकिन C ++ में? क्या कोई विकृति है? [डुप्लिकेट]

Nov 30 2020

यहाँ मेरा C कोड है, मैं void InitList(List &L);हालांकि कोड का उपयोग करता हूं :: Blocks's buildlog में एक त्रुटि है:

अपेक्षित ''; ',', 'या') '' और '' टोकन से पहले

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef int ElementType;

struct SeqList;
typedef struct SeqList List;
void InitList(List &L);

struct SeqList
{
    ElementType *data;
    int CurLength;
};

/*----------------------------------*/

void InitList(List &L)
{
    (&L)->data = malloc(sizeof(ElementType)*MaxSize); 
    (&L)->CurLength = 0;
}


int main()
{
    List L;
    InitList(&L);
    return 0;
}

लेकिन मैंने C ++ में कोशिश की, कोई त्रुटि नहीं है:

#include <iostream>
using namespace std;
#define InitSize 100
typedef int ElementType;

struct SeqList;
typedef struct SeqList List;
void InitList(List &L);

struct SeqList
{
    ElementType *data;
    int CurLength;
};


/*----------------------------------*/

void InitList(List &L)
{
    L.data = new ElementType[InitSize]; //L.data = malloc(...)
    L.CurLength = 0;
}

int main()
{
    List L;
    InitList(L);
    return 0;
}

जवाब

2 Monstarules Dec 01 2020 at 02:09

यदि आप सी में फ़ंक्शन डिक्लेरेशन में इसे पास नहीं कर सकते हैं तो आपको उस डेटा को पॉइंटर को रेफर करना चाहते हैं।

void InitList(List *L)
{
    L->data = malloc(sizeof(ElementType)*MaxSize); 
    L->CurLength = 0;
}

और तब

List *L;
InitList (&L);
1 RemyLebeau Dec 01 2020 at 02:22

में void InitList(List &L);, संदर्भL द्वारा पारित किया जा रहा है । C संदर्भों का समर्थन नहीं करता है, जो कि C ++ फीचर है। सी में, आपको इसके बजाय सूचक द्वारा पास करने की आवश्यकता है (जो कि वास्तव में उपयोग करते समय आपका क्या करने की कोशिश कर रहा है , लेकिन इसके लिए घोषणा गलत है), उदाहरण के लिए:Lmain()List L; InitList(&L);InitList()

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef int ElementType;

struct SeqList;
typedef struct SeqList List;
void InitList(List *L);
void CleanupList(List *L);

struct SeqList
{
    ElementType *data;
    int CurLength;
};

/*----------------------------------*/

void InitList(List *L)
{
    L->data = malloc(sizeof(ElementType)*MaxSize); 
    L->CurLength = 0;
}

void CleanupList(List *L)
{
    free(L->data); 
    L->CurLength = 0;
}

int main()
{
    List L;
    InitList(&L);
    ...
    CleanupList(&L);
    return 0;
}