该代码在我的Xcode编译器中不起作用。它说*&point预期为'('。我真的不知道出什么问题了。它应该起作用了。
#include<stdio.h>
#include<stdlib.h>
void transformCopy(int *point);
void transformTrue(int *&point);
int main(){
int *a,*b,i=0;
transformTrue(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){
point=(int*)malloc(5*sizeof(int));
}
最佳答案
*&点应为'('。
引用在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();