c - 传递字符数组的指针

标签 c arrays

我写了一个这样开始的函数:

 void fun(char *in,char *po)
 {
     char *i,*p;
     i=&in[0];
     p=&po[0];
     //some operation with *i and *p
}

为什么该代码是正确的,为什么它对下面的代码发出警告:

   void fun(char *in,char *po)
    {
      char *i,*p;
      i=∈
      p=&po;
      //some operation with *i and *p
 }

在 main 中,我这样调用函数:

fun(&arr1[0],&arr2[0]);

既然我们将地址传递给两个数组的第一个索引,为什么第二个代码不起作用?我也不理解指针 &in[0] 必须指定索引号。因为它只是一个指针而不是一个数组。请解释

最佳答案

表达式 &in[0] 为您提供指向数组中第一个元素的指针,该元素由 in 指向。它的类型是char *

表达式&in给你一个指向指针in的指针,类型是char **。与第一个完全不同。


另请注意,您不需要 &in[0],只需执行 i = in 即可。

原因是 in[0] 等价于 *(in + 0),这意味着 &in[0] 是等价的&*(in + 0) 和取地址和解引用运算符相互抵消,所以它等同于 (in + 0) 当然是一样的就像普通的 in 一样。

此外请注意,数组自然会衰减为指向其第一个元素的指针,因此 fun(&arr1[0],&arr2[0])fun(arr1, arr2).

关于c - 传递字符数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34037049/

相关文章:

c - 将进程附加到新终端 (Mac OS)

javascript - 如何正确构建多维更新对象/数组并将其修补到现有的多维对象上? (javascript)

arrays - 列出一个类的所有元素并将它们存储在一个数组中以一次性设置外观属性

arrays - 德尔福动态数组

c - 读取文件,将其反转并将其写入另一个文件

c++ - C 或 C++ 中乘法和除法的较高部分?

C 程序 - exer1.c :39: error: expected ‘)’ before ‘&’ token

c++ - 如何使用 C++ 观看 winapi dll 函数调用

java - 用户输入后打印数组

javascript数组转换为特定格式