我正在制作一个程序,在c中找到两个字符串的字谜。但我最终在一份声明中
array[1-'a']++;
我不太清楚该声明的工作情况。 那里的任何人帮助我..!
答案 0 :(得分:5)
'a'
的ASCII值为97
。 1 - 97
是-96
。 array[-96]
相当于*(array - 96)
。如果array - 96
是有效地址,则array[1-'a']++;
将使地址array - 96
的值递增1,否则取消引用它将调用未定义的行为。
答案 1 :(得分:4)
'a'
是一个字符常量,它是一个整数,它是a
的字符代码(如果使用ASCII代码,则为97)。
array[1-'a']
相当于*((array)+(1-'a'))
,1-'a'
元素('a'-1
元素之后的array
元素)++
指向的元素。 array[1-'a']++
递增,相当于添加1. array[1-'a']
是 postfix increment ,因此此表达式的计算结果为{{{ <}> 在递增之前。
可能的用法示例:
#include <stdio.h>
#include <limits.h>
int main(void) {
int data[SCHAR_MAX] = {0};
int* array = &data['a'];
printf("%d\n", data[1]); /* 0 will be printed */
array[1-'a']++;
printf("%d\n", data[1]); /* 1 will be printed */
return 0;
}
答案 2 :(得分:3)
array[1-'a']++;
a
是ASCII 97. 1 - 97
是-96
array[-96]
,如果是有效地址,则在96
array
个元素
++
增加其操作数,或array[-96]
。然而,这段代码的正确性非常可疑。