C 如何理解解引用和泛型指针以查看输出?

C 如何理解解引用和泛型指针以查看输出?,c,C,为什么输出是:aa b ee f ii j?行:void*pFuncvoid*;创建一个类似于函数打印的函数pFunc?我知道一个空指针是一个通用指针,但是,输出是如何变成现在这样的呢? 命令行中的参数:aaa eee iii *p的优先级高于+1,因此发生的情况如下: 您正在发送三个参数: ->aaa ->eee ->iii *p+1点在第一个字符上加一,因此它指向第二个字符。所以,你打印的是aa而不是aaa **p+1返回第一个字符的值,并向其中添加一个字符,得到b 每个

为什么输出是:aa b ee f ii j?行:void*pFuncvoid*;创建一个类似于函数打印的函数pFunc?我知道一个空指针是一个通用指针,但是,输出是如何变成现在这样的呢? 命令行中的参数:aaa eee iii


*p的优先级高于+1,因此发生的情况如下:

您正在发送三个参数:

->aaa
->eee
->iii
*p+1点在第一个字符上加一,因此它指向第二个字符。所以,你打印的是aa而不是aaa **p+1返回第一个字符的值,并向其中添加一个字符,得到b


每个命令的操作都是相同的,将一个移动到字符串的第一个printf中,并在感兴趣的putchar命令中将字符增加一个。

您还希望看到什么

这:

表示:取消对p的引用,并将结果值加1。 因为p dereferenced是char*,所以偏移量为1个字符,导致aaa变为aa,e和i也是如此

这是:

**p+1
表示:取消引用p,然后取消引用结果值,然后添加1。 由于两次取消引用字符**的结果是该数组第一个字符串的第一个字符,因此结果值为97,或“a”,解释为一个字符。 加上1,你会得到98,或“b”,解释为一个字符。 我和e也是一样

此外:

行:void*pFuncvoid*;创建一个类似于函数打印的函数pFunc

不,你刚刚给pFunc取了另一个名字。 因此,功能不相似,但完全相同

行:void*pFuncvoid*;创建类似于函数打印的函数pFunc

对。无效*pfuncfoid*;将pFunc声明为指向返回类型为void且需要void*类型参数的函数的指针

为什么输出是:aa b ee f ii j

片段

for(i=1; i< argc;i++) 
      pFunc(argv+i);  
将从第二个字符打印字符串,即它将打印aa。 **P是一个字符,**P+1增加该字符和putchar的ascii值**P+1;将打印该字符。a的ASCII值为97和98 b


因此,aaa的输出为aa b。其他论点也是如此。

谢谢,我已经编辑好了。你是在问打印的作用吗?这个函数指针是如何工作的?或者,为什么转换为void*或从void*转换为void*有效?
**p+1
for(i=1; i< argc;i++) 
      pFunc(argv+i);  
printf("%s",(*p+1));