c - C 中的 char **ptr 和 char *ptr[] 有什么区别?

标签 c

#include<stdio.h>
void display(int n, char *str[])
{
  int i=0;
  while(i<n) printf("%s ",str[i++]);
}
int main()
{
  display(1,"Hello");return 0;
}

当我运行上面的代码时,我收到警告

    arr.c: In function 'main':
    arr.c:11:12: warning: passing argument 2 of 'display' from incompatible         pointer
    type
    display(1,"hello");
            ^
    arr.c:3:6: note: expected 'char **' but argument is of type 'char *'
    void display(int n,char *str[])

但是它和

有什么不同
    int main(int argc, char * argv[])

有什么区别
    char **argv and char *argv[] 

我绝对不是在问像 char *argv[100] 这样的问题

最佳答案

作为函数的参数,char **ptrchar *ptr[] 是等价的,否则它们是不同的。前者是指向char 的指针,而后者是指向char 的指针数组。

当将字符串文字传递给函数时,会传递指向其第一个字符(char * 类型)的指针。您需要将函数的第二个参数更改为 char *str

void display(int n, char *str)  
{
    // Function body
}

关于c - C 中的 char **ptr 和 char *ptr[] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651353/

相关文章:

c - SDCC/GBDK,将结构数组传递给函数

c - 用 C 编写程序,通过 for 循环查找用户定义的平均值

c - 为什么我无法读取文件?

c - -Ofast 的 GCC 问题?

c++ - C 与 C++ 大小

c - 运算符 ':=' 是什么意思?

java.lang.UnsatisfiedLinkError Windows 上的 JNI 错误

c - 更安全的重新分配方式

c - Linux GKI 代表什么?

c - Tensorflow:TF_SessionRun 返回 TF_INVALID_ARGUMENT