易截截图软件、单文件、免安装、纯绿色、仅160KB

我的C实践(2):联合的妙用

    在C语言中,联合类型是一种比较特殊的类型,其多个成员共享一个存储区(为最大成员的长度),一次只能包含一个成员值,会进行内存对齐。对联合类型进行sizeof运算会包括所有成员所需要的存储空间量,还包括成员间和成员后面的填充空间。联合类似于其他语言中的“变体记录”,如果联合的长度很大或者有大量的联合,则可以大大节省存储空间。
    1、联合只能一次赋值一个成员,并使用它,但C语言没有提供查询联合上一次赋值所用成员的方法。我们可以定义一个enum,其中各个枚举常量代表union各个成员的标志。然后把union和这个enum封装在一个struct中,当对union的某个成员赋值时,就设置相应的标志,这样就可以跟踪联合的成员赋值。
/* widget.c:用枚举常量来跟踪联合类型的成员赋值 */
#include <stdio.h>
#include <string.h>
enum widget_tag{ /* 联合的各个成员的标志 */
count_widget,
value_widget,
name_widget
};
struct WIDGET{ /* 把union和enum封装在一个struct中 */
enum widget_tag tag;
union{
long count;
double value;
char name[10];
} data;
} x;
typedef struct WIDGET widget;
/* 调用本函数就可以不必考虑联合的上一次赋值所用成员 */
void print_widget(widget w){
switch(w.tag){
case count_widget:
printf("Count: %ld\n",w.data.count);
break;
case value_widget:
printf("Value: %.15f\n",w.data.value);
break;
case name_widget:
printf("Name: \"%s\"\n",w.data.name);
break;
}
}
int main(){
x.tag=count_widget; /* 要给成员count赋值,设置其标志 */
x.data.count=10000;
print_widget(x); /* 会自动打印该成员的值 */

x.tag=value_widget;
x.data.value=3.14159265358979323846;
print_widget(x);

x.tag=name_widget;
strncpy(x.data.name,"Millard",10);
print_widget(x);
return 0;
}

    2、如果引用联合的某一个成员,但联合上一次赋值的不是该成员,则是以不可移植的方式使用联合。我们可以利用这个方法来了解计算机内部的一些底层数据表示方法。例如要发现浮点数是如何表示的:
#include <stdio.h>
/* 用联合类型来获取浮点数的底层表示 */
void prin


相关文档:

strassen in c language.

#include<stdio.h>
#define N 8
void input(int n,int p[N][N])
{
 int i,j;
 for(i=0;i<n;i++)
 {
  printf("please input the %d line:\n",i+1);
  for(j=0;j<n;j++)
  {
  scanf("%d",&p[i][j]);
 }
}
 }
void output(int n,int p[N][N])
......

C技巧拾遗~

1. 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回指向字符的指针的函数的指针的数组?
这个问题至少有以下3 种答案:
1. char *(*(*a[N])())();
2. 用typedef 逐步完成声明:
typedef char *pc;  /* 字符指针*/
typedef pc fpc(); /* 返回字符指针的函数*/
typedef fpc *pfpc; /* 上面函数的指针*/ ......

oracle中pro*c的学习


oracle中pro*c的学习
 一 Pro*C 程序概述:
1.什么是Pro*C程序
在ORACLE数据库管理和系统中, 有三种访问数据库的方法;
(1) 用SQL*Plus, 它有SQL命令以交互的应用程序访问数据库;
(2) 用第四代语言应用开发工具开发的应用程序访问数据库,这些工具有SQL*froms,QL*Reportwriter,SQL*Menu等;
(3) 利用在 ......

20100531 《C陷阱与缺陷》第三章读书笔记

  今天是5月的最后一天了,2010年的5月,倒霉的一个月终于要过去了。今天抽空我又读完了第三章,顺便做下笔记。
  这一章的题目叫做---语义“陷阱”
  程序也有可能表面看上去是一个意思,实际上的意思却相去甚远。
  对于数组:
  C语言中只有一维数组, ......

C static

  C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。
      由于 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号