指针作为C中的参数

时间:2019-01-12 16:37:45

标签: c pointers parameters

enter image description here

该代码在我的Xcode编译器中不起作用。它说*&point预期为'('。我真的不知道出什么问题了。它应该有用。

signOut()

1 个答案:

答案 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();

的电话