c - 指针作为C中的参数-LMLPHP

该代码在我的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();

10-04 18:45