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 ++ फीचर है। सी में, आपको इसके बजाय सूचक द्वारा पास करने की आवश्यकता है (जो कि वास्तव में उपयोग करते समय आपका क्या करने की कोशिश कर रहा है , लेकिन इसके लिए घोषणा गलत है), उदाहरण के लिए:L
main()
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;
}