c - *(a+b) 和 (*a+b) 有什么区别

标签 c ansi-c

一位 friend 帮助我编写了这段代码,但我不明白它是如何工作的。第5行是(*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;

最佳答案

注意,*pp相当于pp[0],一般情况下*(pp + n)相当于 pp[n],所以

*pp = *(pp + n);

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

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

这可以写

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

pp 指向的 block 中的第一个 char 中减去 97('a' 的 ASCII 值),得到差值乘以 4。

关于c - *(a+b) 和 (*a+b) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515965/

相关文章:

c - 从 ANSI C 中的字符串中获取特定行

arrays - 创建 int 数组,它是一个位字段

c - 解析 CSV 文本行时出错

c - 如何让用户输入一个单词进行字符串比较?

c - ANSI C 警告 : assignment from incompatible pointer type

java - 如何使用 swig 将 wchar_t 数组转换为 java 的字节数组?

c - 使用右移和左移运算符时的优先级

arrays - ANSI C - 数组的较高元素

c - 通过管道 C 发送二进制数据

c - 为什么我的 C 随机数生成器只返回 "42"?