很难判断此处所问的问题。此问题模棱两可、模糊不清、不完整、过于宽泛或过于修辞,无法以其当前形式合理地回答。若要获得澄清此问题以便重新打开的帮助,请单击visit the help center。
10年前关闭了。
一个朋友帮我写了这段代码,我不明白它是如何工作的。在第五行是(*pp-97)*4基本上是char的大小110所以(110-97)*4或pp的扫描值?谢谢
char *pp =(char*)malloc(110);
printf("Enter text: ");
scanf("%s", pp);
*pp = *(pp + n);
int f = (*pp - 97)*4;
3条答案
按热度按时间pw9qyyiw1#
注意,
*pp
等价于pp[0]
,通常*(pp + n)
等价于pp[n]
,因此也可以写为
pp[0] = pp[n];
,将偏移量n
处的char
复制到偏移量0处的第一个char
。这个可以写成
因此,从
pp
指向的块中的第一个char
中减去97('a'
的ASCII值),然后将差值乘以4。5m1hhzi42#
在C中,数组操作符和指针解引用是一回事。通过使用正确的符号,代码变得不那么混乱(imo)。
*(p + i)
是p[i]
的同义词,因此*pp
与*(pp + 0)
相同,*(pp + 0)
与pp[0]
相同9njqaruj3#
这是一个非常奇怪的片段。
这一行基本上声明了一个大小为110的字符串:
这两行从用户那里获取输入:
现在事情开始变得奇怪了。
上一行将此字符串的第一个字符更改为字符串中的第n个字符。
现在就这一行而言。这里你是在引用指针pp。当你引用这个指针时,它也将是pp所指向的第一个字符。这个字符的值将被转换为一个整数(它的ASCII表示),然后减去97(这是
a
的ASCII值),然后乘以4。