繁体   English   中英

**运算符在C中是什么意思?

[英]What does the ** operator mean in 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

说得通? 我试图运行的程序令人窒息。 如果我尝试打印它,则会出现分割错误

第一个printf将字符串打印得很好。 第二个printf失败。

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

argv -aps_instance1001-aps_ato0-aps_ipc_debug3

Segementation Fault (core dumped)

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

不,这只是两个取消引用

char **argv

表示: argv两次取消引用是一个char 换句话说, argv是指向char的指针。


相同的:

“如果是这样,则行: **argv 说得通?”

声明说**argv是一个char 在运行时, argv将被取消引用两次; 值是charargv ,指针的指针char ,是指向。

**只是两个*

就分段故障而言,看一下行printf("argv %s\\n",argv); printf需要一个char * ,而不是char ** ,因此它正在查看一个指针数组而不是一个字符数组。 printf试图将所有在argv处的内容打印为一个字符串,直到遇到零为止,并且可能在找到一个之前就超出了范围。

argv是一个char ** ,它是一个指向指针的指针,或者在这种情况下是一个指针数组。 不要直接打印它,因为它没有外部含义。 (当然,您可以打印指针值。)

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

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

是。

char ** argv

和...一样

char * argv []

没有。

每个*引入一个间接级别。 在这种情况下,这意味着argv是指向指针的指针。 从技术上讲,它实际上不是一个指针数组,可以将其声明为char * argv[]

显然,“否”是指**本身并不特殊。 或者它很特殊,但不要大于或小于****

char **argvchar *argv[]

这里argv是参数向量。

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

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

这与Fortran相反,在Fortran中 ,“ ** ”是单个令牌,并用作幂运算符。

因此,马丁·贝克特(Martin Beckett很好地涵盖了这个含义,但实际上它不是“运算符”。

暂无
暂无

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

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