C 如何理解解引用和泛型指针以查看输出?
为什么输出是:aa b ee f ii j?行:void*pFuncvoid*;创建一个类似于函数打印的函数pFunc?我知道一个空指针是一个通用指针,但是,输出是如何变成现在这样的呢? 命令行中的参数:aaa eee iiiC 如何理解解引用和泛型指针以查看输出?,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 每个
*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));