c - 为什么当我将参数声明为 char 并在 htoi 中使用 char 参数时,编译器会产生错误?
问题描述
我正在编写一个将十六进制值转换为数字值的程序,为此我已经做到了,因此整数函数 htoi(char s[i]) 接受 char 数组。
我使用 getchar() 插入一个 char 数组,以允许用户输入字符,然后将这些字符分配给我的代码中的一个数组,然后将所述数组用作 htoi 的参数,但是编译器抱怨 htoi 正在使用一个参数有一个没有强制转换的指针并且想要 char。
我尝试将 char s[] 之类的数组更改为 int s[i],因为 char 只是一个较小的 int,对吗?因此,当我将其更改为 int 时,编译器会抱怨 htoi{s[i]) (s[] 现在是一个 int )从整数中生成一个指针,而无需强制转换。
所以,我意识到数组中的迭代器只不过是指向数组中元素的指针,好吧。太好了,所以我删除了我和。. . 它需要在 ']' 标记之前有一个表达式。
我已经用尽了我的工具包。
#include <stdio.h>
#define YES 1
#define NO 0
#define EXIT '~'
int htoi(int s[]);
int main(){
int i, c = 0;
int s[i];
for (i = 0; (c = getchar()!= EXIT); i++){
s[i] = c;
if(c == '\t' || c == '\n' || c == ' '){
htoi(s[]);
}else{
putchar(c);
}
}
}
int htoi(int s[]){
int isHexidecimal;
int hexdigit;
int n;
int i = 0;
if(s[i] == '0'){
i++;
if(s[i] == 'x' || s[i] == 'X')
i++;
}
isHexidecimal = YES;
while(isHexidecimal == YES){
if(s[i] >= '0' && s[i] <= 9){
hexdigit += s[i] - '0';
i++;
}else if(s[i] >= 'a' && s[i] <= 'f'){
hexdigit += s[i] - 'a' + 10;
i++;
}else if(s[i] >= 'A' && s[i] <= 'F'){
hexdigit += s[i] - 'A' + 10;
i++;
}else{
isHexidecimal = NO;
}if(isHexidecimal == YES) {
n = n * 16 + hexdigit;
}else {
n += 0;
}
}
return n;
}
我希望 main 方法运行分配给变量 c 的 getchar() 函数,然后将变量 c 分配给数组,然后将所述数组传递给 htoi。
htoi 会将十六进制返回整数值,如果我没有输入有效的十六进制值,则返回“0”,或者返回十六进制值并由于循环没有输入有效的十六进制值而终止。
解决方案
htoi(s[]);
无效,不代表什么。只需将指针传递给数组。
htoi(s);
这
int htoi(int s[]);
int s[]
函数参数列表中的数组声明int htoi( <here> )
被完全解释为好像它是指向类型的指针int *s
推荐阅读
- angular5 - 重新排序 ngx-datatable 中的列
- javascript - 如何正确设置标签和文本框填充?
- android - 无法在图像视图中看到我拍摄的原始照片
- node.js - 在 NodeJS 中放置函数来操作 MongoDB 不起作用
- angular - Karma Runner 找不到从 tsconfig.json 到 ES6 模块的路径
- reactjs - GraphQL 订阅不会监听所有新的创作 - react-apollo
- angularjs - 跨域发布请求Angular js
- python - 在 pandas.DataFrame.query() 表达式中使用负数
- python - 如何使用 tzlocal 查找正确的时区?
- python - 从 HTTP 标头的每一列指定 read_csv 中每一列的数据类型