C语言:在字符数组中查找
我正在自学C语言。有人能就下面的问题给我一个提示吗?(只是一个提示很好,我会从那里着手。)谢谢 症状是打印的索引号始终为0C语言:在字符数组中查找,c,arrays,char,lookup,C,Arrays,Char,Lookup,我正在自学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
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);
print(“\n\n Lookdown:从一个值开始,获取匹配项的索引\n”);
char myarrayofleters2[]={'w','x','y','z'};
char myLookUpValue=“y”;
int myResultIndexNumber;
int myArrayCounter;
对于(myArrayCounter=0;myArrayCounter)
“y”
不是字符,而是字符串(const char[]
)。适当时,数组会衰减为指向其第一个元素的指针。您正在将该数组的地址(指向其第一个元素的指针)转换为字符(打开警告)。您想要:
char myLookUpValue = 'y';
使用单引号:
char myLookUpvalue = 'y';
这很简单,我想,我要说的是你给一个字符分配了一个字符串“y”
代码将指针的最低8位指定给包含“y”的常量字符串,该字符串是内存位置,不太可能等于字符代码“y”。这里有一个主要问题:
char myLookUpValue = "y";
表达式“y”
是字符串文字,其类型为“char
的2元素数组”,内容为{y',0}
。若要定义字符文字,请改用单引号:
char myLookupValue = 'y';
除非它是sizeof
或一元&
运算符的操作数,或者是用于初始化声明中另一个数组的字符串文字,否则“T的N元素数组”类型的表达式将被转换(“衰减”)为“指向T
的指针”类型的表达式,表达式的值将是数组第一个元素的地址
在代码中,表达式
“y”
不是sizeof
或一元&
运算符的操作数,当它用于初始化声明中的某个内容时,该内容不是char
的数组,因此它被转换为指针类型,其值是存储中字符串的第一个字母的地址。然后,该地址值被转换为RTE输入char
并分配给myLookupValue
;结果很可能不是'w'
、'x'
、'y'
或'z'
。因此比较失败。sizeof(MyArrayFletters2)
返回数组第一个元素的内存地址大小。我假设这不是您想要的。在这种情况下,它基本上是意外工作的,因为sizeof(char*)
是4,但是如果您扩展或缩小数组,它将不起作用。@cmbasnett:不,它不起作用。sizeof a_数组
返回数组的大小,以字节为单位。如果它是某个指针的sizeof a_指针的大小,它将返回指针的大小。两者都不返回第一个元素的大小。这将是某个数组的sizeo[0]
。编译器知道如何计算数组的大小。数组不是指针。循环很好,因为sizeof(char)
总是1
@cmbasnett:此外,数组不能“扩展”或“收缩”。不知道你的意思是什么。你是对的,关于返回指向第一个元素的指针大小的sizeof
调用,我错了。我指的是扩展和收缩数组,如果他决定手动更改该数组的大小,当然不是动态调整大小。@cmbasnett:啊,好的,这是有意义的。我可能应该选择bvee我没办法弄明白。
char myLookupValue = 'y';