C 指针表示法与数组表示法比较 : When passing to function

标签 c arrays function pointers

我的问题基于以下代码:

int myfunct(int ary[], int arysize)   
int myfunct2(int *ary, int arysize)

 int main(void){
   int numary[10];
   myfunct(numary, 10)
   myfunct2(numary, 10)
   return;
 }

int myfunct(int ary[], int arysize) {   
      //Whatever work is done

  }

int myfunct2(int *ary, int arysize) {
     // Whatever work is done

  }

是否有理由使用其中一个而不是另一个?详细说明一下,当涉及数值数组时,是否有任何理由希望使用指针表示法而不是数组表示法。如果使用指针表示法,则将在函数内使用指针算法等。如果使用 [] 数组表示法,则可以像往常一样使用数组。我是编程新手,目前我看不到使用指针表示法有任何好处。

我的确切问题是,是否有任何理由使用指针表示法将数值数组传递给函数,从而在函数内使用指针操作。

最佳答案

当您将函数参数声明为数组时,编译器会自动忽略数组大小(如果有)并将其转换为指针。也就是说,这个声明:

int foo(char p[123]);

100% 等同于:

int foo(char *p);

事实上,这与符号无关,而是与实际类型有关:

typedef char array_t[42];
int foo(array_t p);  // still the same function

这与您如何在函数内访问 p 无关。此外,[] 运算符不是“数组表示法”。 [] 是指针运算符:

a[b]

100% 等同于:

*(a + b)

关于C 指针表示法与数组表示法比较 : When passing to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298957/

相关文章:

oracle - 将 Crystal Report 命令参数传递给 Oracle 函数

c++ - 如何使用 gtags -v 创建索引但跳过一些子目录

c - 下面的输出如何可能?

c - 如何为错误创建语法规则?

r - 函数表达式

Javascript函数有什么区别吗?

c - telnet 消息结束

在 C 中创建数组并将指向所述数组的指针传递给函数

c - 如何将指向数组的指针传递给函数?

php - Mysql 获取数组 Foreach