有人可以向我解释
的工作原理count [i ++]和count [i] ++
之间有什么区别 void fillCharCounts(char *str, int *count)
{
int i;
for (i = 0; *(str+i); i++)
{
count[*(str+i)]++;
}
}
答案 0 :(得分:1)
代码计算并将str
的每个字母表的频率存储到整数数组count
。执行此功能后,count[index]
的频率为str[index]
。让我解释一下你想知道的事情:
对于具有条件*(str + i)的循环:
*(str + i)
等于str[i]
,它指的是str
的第i个字符。字符指针的值递增以访问下一个索引的地址,然后取消引用该地址以获取指针str
现在指向的索引值。
直到Loop执行的位置:
每个*(str+i)
的循环都将继续,直到它在*(str+i)
找到Null Terminator,即假设以下字符串:
char str[] = "abc";
str
中存储的内容现在是abc \0
,因此循环将一直执行,直到达到\0
。条件*(str+i)
基本上等于*(str+i) != '\0';
count [i ++]和count [i] ++之间有什么区别:
count[i++]
等于*(count + i++)
,address
在使用前count
存储(count+i)
count[i]++
。这意味着一旦语句执行,*(count + i)++
的值加1,count开始指向下一个索引。value
等于(count + i)
,*(count+i)
对count[*(str+i)]++;
指向的索引中存储的*(str+i)
强加Post Increment。这意味着在执行此语句后,value
的值增加1 BUT 计数仍然指向当前索引。在你的情况下循环中使用的语句是:
(str+i)
value
将index
存储在Post Increment
指向的地址count[index]
将被用作*(count+index)
点数,spring-config.xml
将被强加给 <bean id="msgBean" class="com.example1.MessagesBean" init-method="start">
</bean>
<bean name="carBean" class="com.example2.Car" init-method="initEngine">
<constructor-arg ref="engineBean" />
</bean>
<bean id="engineBean" class="com.example2.Engine" />
,这意味着Car.java
的值会增加执行上述声明后的一个。希望它现在已经清除了。
答案 1 :(得分:0)
此代码段计算str
中找到的每个字符(不包括终止空字符)的出现次数,并将它们存储到count
。当函数返回时,count
充当字符到数字的映射。例如,count['a']
是指'a'
中str
的出现次数。 *(str + i)
等于str[i]
,它引用C风格字符串i
中的str
个字符。因此循环一直持续到str
引用的字符串的结尾(即,循环直到终止空字符'\0'
,其在布尔上下文中计算为false
)。 count[*(str+i)]++;
相当于count[str[i]]++;
,它将字符str[i]
的计数(出现次数)加1。 count[i++]
和count[i]++
之间的差异与此代码段无关。