Kod: Zaznacz cały
void addINT(int *INT, int add, int *Objects)
{
int* objectID = new int[Objects++];
for(int i=0; i<Objects-1; i++)
{
objectID[i] = INT[i];
}
objectID[Objects-1]=add;
INT=objectID;
}
Kod: Zaznacz cały
addINT(i,12,Objects_i)
Kod: Zaznacz cały
void addINT(int *INT, int add, int *Objects)
{
int* objectID = new int[Objects++];
for(int i=0; i<Objects-1; i++)
{
objectID[i] = INT[i];
}
objectID[Objects-1]=add;
INT=objectID;
}
Kod: Zaznacz cały
addINT(i,12,Objects_i)
Jak mniemam cos w stylu:JoeBuck pisze:P.S. Co rozumiesz przez "Biblioteka z tą funkcją ma być dostępna zarówno dla c++ jak i dla c"?
Co najmniej jednego z tych dwóch języków nie znam (szczególnie tego z jedna literką)
Kod: Zaznacz cały
(*Objects)++;
int* objectID = new int[*Objects];
Kod: Zaznacz cały
INT=objectID;
Kod: Zaznacz cały
if (objectID == NULL) {
//jakies operacje
}
Jeśli chcesz korzystać z memcpy z C to lepiej użyć po prostu realloc (wtedy będzie automatycznie zmieniał rozmiar i kopiował (o ile potrzeba - przeważnie nie będzie kopiował)).
Jako skompilowana biblioteka za pomocą kompilatora c++, może i będzie działać z C, ale nie skompilujesz jej za pomocą kompilatora C (w języku C nie masz new i delete, ale masz dużo fajniejsze imo malloc, calloc, realloc, free (no fajniejsze poza tym, że nie wywołują konstruktora klasy po alokacji jak new... ale to dlatego, że w C nie ma klas)).pixelenter pisze:Biblioteka z tą funkcją ma być dostępna zarówno dla c++ jak i dla c.
Kod: Zaznacz cały
bool addINT(int *INT, int add, int *Objects)
{
int *tmp;
if( (tmp = (int*) realloc(INT, *Objects++ * sizeof(int))) == NULL )
{
return 0;
}
else
{
tmp[*Objects-1]=add;
INT = tmp;
}
free (tmp);
return 1;
}
Kod: Zaznacz cały
//wskażnik na wskaźnik na INT
bool addINT(int **INT, int add, int *Objects)
{
int *tmp;
// 'Objects' musi być preinkrementowane tzn wartość jest zwiększana przez podaniem jako argument funkcji
if( (tmp = (int*) realloc(*INT, (++(*Objects)) * sizeof(int))) == NULL )
{
return false; //typ bool przyjmuje true i false (to niby odpowiedniki 1 i 0, ale bardziej eleganckie)
// pamiętaj, że w przypadku niepowodzenia realloc() pozostawi obszar wskazywany przez *INT w stanie nienaruszonym (nie zwolni go)
}
else
{
// nawiasy dla zwiekszenia czytelności
tmp[(*Objects)-1]=add;
//zapisujemy pod adres wskaźnika
*INT = tmp;
}
// nie zwalniamy starego obszaru - realloc zrobi to, jeśli będzie trzeba
return true;
}
Kod: Zaznacz cały
int **i;
int count=0;
addINT(i, 1, &count);
Kod: Zaznacz cały
int *i = NULL; //wskaźnik typu int ustawiony na NULL (czyli nie wskazujący na nic)
int count=0;
addINT(&i, 1, &count); //Przekazujemy jako pierwszy argument adres do wskaźnika
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość