**运算符在C中的含义是什么?

时间:2010-03-08 19:47:40

标签: c

**在C中有什么特殊含义吗?

像这样:

static intparse_one (int argc, char **argv)
{
    cmd_line       *slot;
    int             value;
    Flag_name       flag_name;
    int         i;

printf("argv %s\n",argv);
printf("argv[0] %c\n",**argv);

如果是,行

**argv

有意义吗?我试图运行的程序令人窒息。如果我尝试打印它,我会得到segmentation fault

第一个printf打印字符串。第二个printf失败了。

这是我得到的输出(第一行是正确的):

argv -aps_instance1001-aps_ato0-aps_ipc_debug3

Segementation Fault (core dumped)

7 个答案:

答案 0 :(得分:9)

  

“**在C中有什么特殊含义吗?”

不,只有两个dereferences

char **argv

表示:argv解除引用两次是char。换句话说,argv是指向char的指针。


同样的:

  

“如果是这样,该行:**argv 是否有意义?”

声明称**argvchar。在运行时argv将被解除引用两次;值为charargv指向char的指针指向。{/ p>

答案 1 :(得分:2)

**只有两个*

就segfault而言,请查看您的行printf("argv %s\n",argv);printf期望char *,而不是char **,因此它会查看指针数组而不是字符数组。 printf尝试将argv处的所有内容打印为一串字符,直到遇到零,并且可能在找到之前超出范围。

argvchar **,它是指向指针的指针,或者在这种情况下是指针数组。不要直接打印,因为它没有外在意义。 (当然,如果要查看它,可以打印指针值。)

*argvargv[0]char *,它是char的指针,在这种情况下是argv中的第一个字符串。

**argvchar,在这种情况下是argv中第一个字符串的第一个字符。

答案 2 :(得分:1)

  

char ** argv

相同
  

char * argv []

答案 3 :(得分:1)

没有

每个*都会引入一个间接层。在这种情况下,它意味着argv是指向指针的指针。事实上,从技术上讲,你可以看到它是一个指针数组 - 它可以被声明为char * argv[]

显然,“不”,我的意思是**本身并不特别。或者它很特别,但不能超过****

答案 4 :(得分:1)

char **argvchar *argv[]相同。

这里argv是参数向量。

答案 5 :(得分:0)

这不是指向指针的指针吗?我认为argv参数前面的**与C#中的ref具有相同的效果,以防你知道C#。

答案 6 :(得分:0)

虽然字符串“**”确实具有明确的含义,但我认为问题的答案是“**”不是一个运算符,而是连续两个“*”。

这与Fortran相反,其中“**”是单个标记,并且充当取幂运算符。

所以意思是well covered by Martin Beckett,但它确实不是“操作员”。