设为首页 加入收藏

TOP

C语言 结构体相关 函数 指针 数组(四)
2014-11-23 19:33:06 来源: 作者: 【 】 浏览:98
Tags:语言 结构 相关 函数 指针 数组
FILE*), ungetc(int, FILE*); char *wp = word; /*处理第一个字符, 第一个字符不是 空 不是 EOF 再进行下面的操作*/ while(isspace(c = getc(stdin))); if(c != EOF) *wp++ = c; if(!isalpha(c)) { *wp = ''; return c; } /*循环接收字符串, 字符串接收到非标识符 或者 到达个数上限停止循环*/ 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; }
执行结果 :

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个字节;

/*************************************************************************
    > File Name: memory_struct.c
    > Author: octopus
    > Mail: octopus_work.163.com 
    > Created Time: 2014年03月25日 星期二 12时55分45秒
 ************************************************************************/

#include
  
   

struct word
{
	char c;
	int i;
};

int main(int argc, char **argv)
{
	printf(sizeof(struct word) = %d 
, sizeof(struct word));
	return 0;
}

  

执行结果 :

octopus@octopus-Vostro-270s:~/code/c/struct$ gcc memory_struct.c 
octopus@octopus-Vostro-270s:~/code/c/struct$ ./a.out 
sizeof(word) = 8 


.

作者 : 万境绝尘

转载请注明出处 : http://www.hanshuliang.com/ post=30

.

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C 中对象的等价与同值.. 下一篇深入理解C语言-02-数据编码

评论

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