-1

A friend helped me with this code and I don't understand how it works. in the 5th line is (*pp-97)*4 basically the size of the char 110 so (110-97)*4 or the scanned value of pp? Thanks

char *pp =(char*)malloc(110);
printf("Enter text: ");
scanf("%s", pp); 
*pp = *(pp + n); 
int f = (*pp - 97)*4;
4

3 回答 3

2

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

*pp = *(pp + n);

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

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

这可以写成

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

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

于 2012-11-22T15:44:16.487 回答
0
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]

于 2012-11-22T15:47:10.420 回答
0

这是一个非常奇怪的片段。

这一行基本上声明了一个大小为 110 的字符串:

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

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

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

现在这就是事情开始变得奇怪的地方。

*pp = *(pp + n); 

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

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

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

于 2012-11-22T15:46:48.813 回答