C语言 * (a+b)和(*a+b)有什么区别

bgtovc5b  于 2023-03-22  发布在  其他
关注(0)|答案(3)|浏览(199)

很难判断此处所问的问题。此问题模棱两可、模糊不清、不完整、过于宽泛或过于修辞,无法以其当前形式合理地回答。若要获得澄清此问题以便重新打开的帮助,请单击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;
pw9qyyiw

pw9qyyiw1#

注意,*pp等价于pp[0],通常*(pp + n)等价于pp[n],因此

*pp = *(pp + n);

也可以写为pp[0] = pp[n];,将偏移量n处的char复制到偏移量0处的第一个char

int f = (*pp - 97)*4;

这个可以写成

int f = (pp[0] - 97)*4;

因此,从pp指向的块中的第一个char中减去97('a'的ASCII值),然后将差值乘以4。

5m1hhzi4

5m1hhzi42#

char *pp = malloc(110);
printf("Enter text: ");
scanf("%s", pp); 
pp[0] = pp[n]; 
int f = (pp[0] - 'a')*4;

在C中,数组操作符和指针解引用是一回事。通过使用正确的符号,代码变得不那么混乱(imo)。
*(p + i)p[i]的同义词,因此*pp*(pp + 0)相同,*(pp + 0)pp[0]相同

9njqaruj

9njqaruj3#

这是一个非常奇怪的片段。
这一行基本上声明了一个大小为110的字符串:

char *pp =(char*)malloc(110);

这两行从用户那里获取输入:

printf("Enter text: ");
scanf("%s", pp);

现在事情开始变得奇怪了。

*pp = *(pp + n);

上一行将此字符串的第一个字符更改为字符串中的第n个字符。

int f = (*pp - 97)*4;

现在就这一行而言。这里你是在引用指针pp。当你引用这个指针时,它也将是pp所指向的第一个字符。这个字符的值将被转换为一个整数(它的ASCII表示),然后减去97(这是a的ASCII值),然后乘以4。

相关问题