从外部改变变量

时间:2013-04-06 12:43:18

标签: c

main()函数中,我初始化了几个变量(intint*数组)。然后我打印出来并从控制台scanf中读取它们。

我想将此功能放入某个外部函数中,以便main将如下所示:

int main()
{
    int n = 0, x = 0;
    int *arr = NULL;    
    load(&n, &x, &arr);
}

load()函数调用之后,我希望变量与load()函数内部的变量完全一样。我怎么能这样做?

第二个问题,出于好奇:

/**
 * Description of the function
 *
 * @param int n Foo
 * @param int x Bar
 * @param int *arr Does something
 */
void load(int n, int x, int *arr)
{
    // something
}

这个文档在C编码中是否有用,这是一个好习惯吗?

1 个答案:

答案 0 :(得分:0)

你传递的是两个int和一个指针(第三个参数)的地址,你应该在指针(一个*)中接收前两个参数到int和指向指针的第三个参数(两个** )int:

void load(int* n, int* x, int **arr){
//           ^       ^ one*     ^ two **
    *n = 10;
    *x = 9;
}

在加载函数中,您可以为*n*x分配值,因为两者都指向有效的内存地址,但无法执行**arr = 10 只是因为{ {1}}不指向任何内存(指向NULL ),因此首先必须先为arr分配内存,如下所示:

*arr
  

此文档在C编码中是否有用,这是一个好习惯吗?

但有时我会按照以下方式记录我的函数参数:

void load(int* n, int* x, int **arr){
    *n = 10;
    *x = 9;
    *arr = malloc(sizeof(int));
    **arr = 10;
}

参考:for document practice

修改当您评论时,请执行以下我写的内容,因为void load(int n, // is a Foo int x, // is a Bar int **arr){ // do some thing // something } ,它不会给出任何错误。

malloc()

编译并运行如下:

#include<stdio.h>
#include<stdlib.h>
void load(int* n, int* x, int **arr){
    *n = 10;
    *x = 9;
    *arr = malloc(sizeof(int));
    **arr = 10;
    printf("\n Enter Three numbers: ");
    scanf("%d%d%d",n,x,*arr);
}
int main(){
    int n = 0, x = 0;
    int *arr = NULL;    
    load(&n, &x, &arr);
    printf("%d %d %d\n", n, x, *arr);
    free(arr);
    return EXIT_SUCCESS;
}

由OP评论:

  当我将其更改为 arr = malloc(sizeof(int)(* n))时,

“从void *到int *的转换无效”;

syntax of malloc():

~$ gcc ss.c -Wall
:~$ ./a.out 

 Enter Three numbers: 12 13 -3
12 13 -3

malloc()返回void *malloc(size_t size); void*类型为*arr,这是编译器消息的原因,因为类型不同:int*

但我在malloc()时避免强制转换,因为:Do I cast the result of malloc?读取Unwind的回答