* & ожидаемая точка '('.
Ссылки не существуют в C (void transformTrue(int *&point)
), это код C ++, а не C
Если вы хотите иметь эквивалент в C, вы должны использовать void transformTrue(int **point)
и вам нужно позвонить transformTrue(&a);
Если я изменю ваш код, чтобы он делал в C то же, что и в C ++ (см. Комментарии):
#include<stdio.h>
#include<stdlib.h>
void transformCopy(int *point);
void transformTrue(int ** point); /* ** rather than *& */
int main(){
int *a,*b = 0,i=0;
transformTrue(&a); /* &a rather than just a */
transformCopy(b);
for(i=0;i<5;i++) {a[i]=i;}
for(i=0;i<5;i++){printf("%d ",a[i]);}
printf("\n");
for(i=0;i<5;i++) {b[i]=i;}
for(i=0;i<5;i++){printf("%d ",b[i]);}
printf("\n");
return 0;
}
void transformCopy(int *point){
point=(int*)malloc(5*sizeof(int));
}
void transformTrue(int ** point){ /* ** rather than *& */
*point=(int*)malloc(5*sizeof(int)); /* *point = rather than point = */
}
transformTrue(&a)
изменяет значение a , но transformCopy(b);
ничего не делает, кроме локально (и утечки памяти) и обратно в main значение b по-прежнему 0, программа будет аварийно завершать работу при попытке записи по недействительным адресам
одна возможность - изменить transformCopy следующим образом:
int * transformCopy(){
return (int*)malloc(5*sizeof(int));
}
и, конечно, звонок на b = transformCopy();