我正在学习C语言。有人能给我一个下面问题的提示吗? (只是一个提示很好,我会从那里开始工作。)谢谢。
症状是打印的索引号始终为0.
print("\n\n Lookdown: start with a value and get the index of the match \n");
char myArrayOfLetters2[] = {'w','x','y','z'};
char myLookUpValue = "y";
int myResultIndexNumber;
int myArrayCounter;
for (myArrayCounter=0; myArrayCounter<sizeof(myArrayOfLetters2); myArrayCounter++){
if (myArrayOfLetters2[myArrayCounter] == myLookUpValue){
myResultIndexNumber=myArrayCounter;} //found
} // loop thorugh all members of array
print("myLookUpValue of 'y' returned index number of %d",myResultIndexNumber);
答案 0 :(得分:2)
char myLookUpValue = "y";
"y"
不是char,它是一个字符串(const char[]
)。适当时,数组会衰减到指向第一个元素的指针。您将该数组的地址(指向其第一个元素的指针)转换为char(打开警告)。你想要:
char myLookUpValue = 'y';
答案 1 :(得分:0)
使用单引号:
char myLookUpvalue = 'y';
答案 2 :(得分:0)
我觉得这很简单,我要说的是你要给字符串“y”赋一个字符串。第3行应该是char myLookUpValue ='y';
您的代码会将指针的最低8位分配给包含'y'的常量字符串,该字符串是内存位置,并且不太可能等于'y'的字符代码。
答案 3 :(得分:0)
这里有一个主要问题:
char myLookUpValue = "y";
表达式"y"
是字符串文字,其类型为“{element}}的2元素数组”,内容为char
。要定义字符文字,请改用单引号:
{'y', 0}
除非它是char myLookupValue = 'y';
或一元sizeof
运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则表达式为“N-element array of &
“将被转换(”衰减“)到”指向T
的指针“类型的表达式,表达式的值将是数组的第一个元素的地址。
在您的代码中,表达式T
不是"y"
或一元sizeof
运算符的操作数,虽然它用于初始化声明中的某些内容,但某些内容并非如此t &
的数组,因此它被转换为指针类型,其值是存储中字符串的第一个字母的地址。然后将该地址值转换为char
类型并分配给char
;结果很可能不是myLookupValue
,'w'
,'x'
或'y'
中的任何一个。所以比较失败了。