У меня есть следующий код.casting void * to struct * in C++
#include <iostream>
using namespace std;
typedef unsigned char byte;
typedef struct {
unsigned int a;
unsigned int b;
} Struct_A;
void* malloc_(size_t s, byte* heap, int *next) {
int old = *next;
*next = *next + s;
return heap + old;
}
void f(Struct_A *sa, byte* heap, int *next) {
sa = (Struct_A*) malloc_(8, heap, next);
sa->a = 10;
sa->b = 20;
}
int main() {
byte *heap = new byte[1000];
int next;
next = 0;
Struct_A *sa;
sa = (Struct_A*) malloc_(8, heap, &next);
sa->a = 100;
sa->b = 200;
cout << sa->a << endl;
Struct_A *sb;
f(sb, heap, &next);
cout<< sb->a <<endl;
return 0;
}
код хорошо подходит для sa, но не для sb !!! Функция f() делает то же самое три строки кода после «Struct_A * sa;» делает. Любая идея, что не так с функцией f()?
Это не C, но C++! В C вы не должны использовать 'void *' для другого типа указателя – Olaf
@Olaf Другой способ не C++, но C –
@ DieterLücking: 'cout << sb-> a << endl' или' new byte [1000]; 'are C? – Olaf