设为首页 加入收藏

TOP

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

 

  /*循环接收字符串, 字符串接收到非标识符 或者 到达个数上限停止循环*/

  for(; --max > 0; wp++)

  if(!isalnum(*wp = getc(stdin)))

  {

  ungetc(*wp, stdin);

  break;

  }

  *wp = '';

  return word[0];

  }

  /*

  * 注意点 :

  *   取两个地址的中值 : 一个数组n个元素, 其中值计算 是由 首元素的首地址 和 尾元素的尾地址计算的

  *   二分查找 :

  *     如果要把区间前移, 那么就需要将尾地址设置为 中间元素前一个元素的尾地址, 即中间元素的首地址

  *     如果要把区间后移, 那么就需要将首地址设置为 中间元素后一个元素的首地址, 即中间元素 + 1 的地址

  *

  * 指向结构体数组的指针 :

  *   struct key tab * 是指向结构体数组指针, 该指针可以操作结构体数组

  */

  struct key *binsearch(char *word, struct key *tab, int n)

  {

  int cond;

  struct key *low = &tab[0];  /*0元素的首地址*/

  struct key *high = &tab[n]; /*尾元素的尾地址*/

  struct key *mid;

  while(low < high)

  {

  /*计算中间值的地址*/

  mid = low + (high - low) / 2;

  if((cond = strcmp(word, mid->word)) < 0)

  high = mid; /*mid 是 中间元素前一个元素的尾地址*/

  else if(cond > 0)

  low = mid + 1; /*这里low要成为mid后一个元素的首地址*/

  else

  return mid;

  }

  return NULL;

  }

  </STRING.H></CTYPE.H></STDIO.H>

  执行结果 :

  octopus@octopus-Vostro-270s:~/code/c/struct$ gcc pointer_struct.c

  octopus@octopus-Vostro-270s:~/code/c/struct$ ./a.out

  auto

  case

  auto

  break

  2 auto

  1 break

  1 case

  (2) 结构体大小讨论

  结构体数组指针算术运算 : struct key *p = word_count; 指针 p 指向 结构体数组, 如果 p + 1 , 结果是 p 地址 加上 结构体所占内存大小;

  结构体大小 : 结构体的大小不是完全等于各个成员的长度之和, 对象之间有对齐要求;

  -- 空穴 : 对象间对齐, 会产生空穴, 占有空间, 但是不存储数据;

  示例 : 结构体中由一个 char 和 int , 占用的空间却是 8个字节, 它们的和是 5个字节;

  #include<STDIO.H>

  struct word

  {

  char c;

  int i;

  };

  int main(int argc, char **argv)

  {

  printf(sizeof(struct word) = %d

  , sizeof(struct word));

  return 0;

  }

  </STDIO.H>

  执行结果 :

  octopus@octopus-Vostro-270s:~/code/c/struct$ gcc memory_struct.c

  octopus@octopus-Vostro-270s:~/code/c/struct$ ./a.out

  sizeof(word) = 8

              

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

评论

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