C语言:在字符数组中查找

C语言:在字符数组中查找,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

我正在自学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);
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';