繁体   English   中英

C中按值调用函数

[英]calling function by value in C

我是 C 语言的新手,我试图在这里调用 main 函数中的函数“func”,但它给了我编译错误。 我试图在 Google 中搜索与这种情况类似的示例,但仍然出现错误。

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

struct str {
  int value;
  uint32_t ptr_next;
};

void func(int arg, char* arr[]);

int main() {
  int Arg;
  char* Arr[1];

  func(Arg, *Arr[1]);

  return 0;
}

void func(int arg, char* arr[]) {
  int list;

  struct str r;

  FILE* file = fopen(arr[1], "rb");

  do {
    list = fread(&r, sizeof(struct str), 1, file);

    if (list > 0)
      printf("%d ", r.value);

    fseek(file, r.ptr_next, 0);

  }

  while ((r.ptr_next != 0) && (list > 0));
}

问题是如何在C语言中按值调用函数?

C 仅支持按值调用函数,按引用调用是在 C++ 中添加的并使用&符号。

您传递给函数的值是内存中的一个位置,一个指针。 如果您想将那个内存位置的数据副本交给函数,您需要为它制作一个副本。

// Assuming that Arg and Arr are initialized.
char* Arr2[];                     // Make a storage place for the char**.
Arr2 = malloc(Arg*sizeof(char*)); // Make the right number of char*s in it
for(int e=0; e<Arg; e++) {        // For each elem in the main array: 
  Arr2[e]=malloc(sizeof(char)*strlen(Arr[e])); // Make space for the chars,
  strcpy(Arr2[e],Arr[e]);                      // And copy them.
}

边注

您还没有在 main 中初始化ArgArr 我怀疑您可能指的是命令行参数。

int main(int Arg, char* Arr[])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM