设为首页 加入收藏

TOP

C语言结构体相关函数 指针(五)
2014-04-06 17:42:09 来源: 作者: 【 】 浏览:779
Tags:语言 结构 相关 函数   指针

 

  执行结果 :

  [root@ip28 struct]# gcc word_count.c

  [root@ip28 struct]# ./a.out

  auto

  break

  break

  char

  1 auto

  2 break

  1 char

  宏定义方法 : 获取结构体数组大小;

  -- sizeof 方法 : sizeof (对象) | sizeof (类型名称) 可以获取对象 或者 类型占用的存储空间, 其返回值是 size_t 类型的, 定义在stddef.h 头文件中;

  -- 使用类型测量 :

  #define KEYS (sizeof(key_count) / sizeof(struct key))

  -- 使用对象测量 :

  #define KEYS (sizeof(key_count) / sizeof(struct key_count[0])

  4. 指向结构体指针

  (1) 使用指针方式实现上面的关键字统计程序

  使用指针进行二分查找 :

  -- 使用下标找中值 : 在之前找中值时通过 mid = (low + high)方法, 这样做可行是因为 low 从0开始的;

  -- 如果是指针情况 : mid low high 都是指针, 那么就不能使用上面的那种方法了, 使用 mid = low + (high - low) / 2;.

  -- 指针操作情况的 high 和 low : 其中 low 是首元素的 首地址, high 是 尾元素的尾地址, 只有这样它们的差的 0.5 倍才是准确的中值的首地址;

  指针指向数组注意点 : 不要生成非法的指针, 指针不能指向数组之外的元素;

  -- &key_count[-1] : 这个指针时非法的;

  -- &key_count[n] : 对数组的最后一个元素后面的第一个元素进行& 运算时合法的, 其它操作都是非法的;

  示例程序 :

  #include<STDIO.H>

  #include<CTYPE.H>

  #include<STRING.H>

  #define MAXWORD 20

  /*计算结构体数组的大小*/

  #define KEYS (int)(sizeof(key_count) / sizeof(struct key))

  struct key

  {

  char *word;

  int count;

  } key_count[] =

  {

  auto, 0,

  break, 0,

  case, 0,

  char, 0,

  const, 0

  };

  int getword(char *, int);

  struct key *binsearch(char*, struct key*, int);

  int main(int argc, char **argv)

  {

  char word[MAXWORD];

  struct key *p; /*存放查找方法返回的结构体指针, 该指针指向数组中查找到元素的下标*/

  while(getword(word, MAXWORD) != EOF)

  if(isalpha(word[0]))

  if((p = binsearch(word, key_count, KEYS)) != NULL)

  p->count++;

  for(p = key_count; p < key_count + KEYS; p++)

  if(p->count > 0)

  printf(%2d %s

  , p->count, p->word);

  return 0;

  }

  /*

  * 没有循环控制变量的 for 循环, 在内部通过条件 break

  */

  int getword(char *word, int max)

  {

  int c, getc(FILE*), ungetc(int, FILE*);

  char *wp = word;

  /*处理第一个字符, 第一个字符不是 空 不是 EOF 再进行下面的操作*/

  while(isspace(c = getc(stdin)));

  if(c != EOF)

  *wp++ = c;

  if(!isalpha(c))

  {

  *wp = '';

  return c;

  }

              

首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于C语言中二维数组传参 下一篇简单C++程序—掷骰子

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: