#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct key
{
char* word ;
int count;
};
struct key keytab[] =
{
{"char",0},
{"double",0},
{"enum",0},
{"float",0},
{"int",0},
{"long",0},
{"short",0},
{"signed",0},
{"struct",0},
{"union",0},
{"unsigned",0},
{"void",0}
};
int binSearch(char* , struct key[]);
int main()
{
char* m = "double";
int mid = binSearch(m,keytab);
......
}
int binSearch(char* word,struct key table[])
{
int mid ;
int low = 0 ;
int high = (sizeof table/sizeof table[0])-1;
while(low <= high)
{
mid = (low+high)/2;
......
}
}
程序本意想查找一下double在是结构数组keytab中的第几个元素中的成员。
将结构数组 “keytab” 传递给函数 “binSearch“本身没有什么问题,但是数组作为参数传递的是数组的“首地址”,
这将导致接下来的语句计算出现错误:int high = (sizeof table/sizeof table[0]) -1;
①:因为传递的是首地址,所以sizeof table 所得结果为4
②:因为传递的是首地址,所以sizeof table[0] 所得结果为8,所以最终导致我们的计算错误。
至于为什么是4,为什么是8,我有一篇博文:《关于指针为什么是4个字节大小》可以把这个问题讲清楚