c - 作为指针的参数未正确递增
问题描述
我有一个函数可以计算字符串中元音和辅音的数量:
void CountVowelsConsonants(char* str, int *vowels, int *consonants){
size_t size=strlen(str);
//size-1 because of the '\n' at the end of the string when pressing enter
for (int i = 0; i < size ; ++i) {
char c = str[i];
if(c=='A' || c== 'E' || c=='I' || c== 'O' || c=='U' ||
c=='a' || c== 'e' || c=='i' || c== 'o' || c=='u'){
*vowels++;
}
}
*consonants= size-1 - *vowels;
}
但是当我调用这个函数时,例如:
int vowels;
int consonants;
CountVowelsConsonants("abc", &vowels, &consonants);
它返回:
Vowels: -858993460
Consonants: 858993463
代替:
Vowels: 1
Consonants: 2
我想知道为什么会这样。
我有一个阶乘函数,它具有类似的指针实现,并且可以正常工作:
void factorial(int n, int*fac){
*fac=1;
for (int i = 2; i <= n; ++i) {
*fac*=i;
}
}
访问阶乘函数中的事实指针将正确更改值。唯一的区别是在CountVowelsConsonants
函数中我增加了 1 而不是相乘。
但是,如果我访问 CountVowelsConsonants 函数中的元音指针来增加它会在计数中产生错误。
我的 IDE(CLion)会将*
in变灰*vowels
,表示指针运算符 in
*vowels++;
没用。
关于为什么会这样的任何想法?
解决方案
代替:
*vowels++;
这相当于:
*vowels; // this does nothing, that's what your IDE was telling you
vowel = vowels + 1; // this increments the vowels pointer,
// which is also pretty useless here
你需要这样写:
(*vowels)++;
这相当于这个,这是你真正想要的:
*vowels = *vowels + 1;
运算符的优先级是++
1,而*
(取消引用)运算符的优先级是 2。
推荐阅读
- java - Flink:如何理解并行算子的实例有多少?
- typo3 - TYPO3 站点错误处理不适用于异常
- angular - 无法从 Angular 7 应用程序将整数数组传递给 asp.net webapi
- mfc - 在复选框的单击事件上使用用户定义的消息调用 postmessage
- html - 如何在 3D 轮播中隐藏远图像
- javascript - 如何从节点红色控制节点列表
- reactjs - 如何设置 defaultValue,value={this.state.name},并使用 React 更新文本输入的值?
- java - 听众和表演
- jenkins - 如何在 Jenkins Pipeline 中使用 cucumberSendSlack
- multiprocessing - Python3 How to gracefully shutdown a multiprocess application