答案 0 :(得分:1)
*和预期的'('。
在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();