易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : c

我的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 stru ......

如何理解c和c ++的复杂类型声明(转)


 
如何理解c
和c ++
的复杂类型声明(转)
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) )
[10];
这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++
声明。
  我们将从每天都能碰到的较简单的声明入手,然后逐步加入const
修饰符和typedef
,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++
声明的“
右左法则”

  需要强调一下的是,复杂的C/C++
声明并不是好的编程风格;我这里仅仅是教你如何去理解这些声明。注意:为了保证能够在同一行上显示代码和相关注释,本文最好在至少1024x768
分辨率的显示器上阅读。
让我们从一个非常简单的例子开始,如下:
int n;
这个应该被理解为“declare n as an int”
(n
是一个int
型的变量)。接下去来看一下指针变量,如下:
int *p;
这个应该被理解为“declare p as an int *”
(p
是一个int *
型的变量),或者说p
是一个指向一个int
型变量的指针。我想在这里展开讨论一下:我觉得在声明一个指针(或引用)类型的变量时,最好将*
(或&
)写在紧靠变量之前,而不是紧跟基本类型之后。这样可以避免一� ......

长期收集 C/C++ FAQ

写在前面:
  论坛里总有那么一些问题是长盛不衰的,今天这个问,明天那个问,到历史帖子里一搜可以抓出来一大把。有时候这都令我怀疑是不是我们的教育体制存在问题……
  于是我开了这篇文章,搜集我见到的长生不老之帖,希望可以起到参考价值。
  这里使用的编译环境为 gcc/g++ 4.3.3 for ubuntu 9.04
数组名和指针的问题
  这绝对是教材问题!现在国内有太多教材灌输“数组名相当于指针”的概念了!于是纷纷有人把数组名和指针等同起来,认为数组名其实就是一个指针。久而久之,许多新手已经不知道还有一种数据类型叫做“数组”了。
  对于这个问题首先应该从概念上澄清,坚定不移地把数组和指针这两种类型划清界线,认识到它们虽然有千丝万缕的联系,但其实是两种不同的数据类型。就如下面所看到的:
#include <iostream>
#include <typeinfo>
using namespace std;
#define gettype(id) (cout<<typeid(id).name()<<endl)
int a;
char arrChar[10];
char str1[] = "string";
char str2[] = "string?";
char *p1 = str1;
char *p2 = str2;
int main()
{
gett ......

长期收集 C/C++ FAQ

写在前面:
  论坛里总有那么一些问题是长盛不衰的,今天这个问,明天那个问,到历史帖子里一搜可以抓出来一大把。有时候这都令我怀疑是不是我们的教育体制存在问题……
  于是我开了这篇文章,搜集我见到的长生不老之帖,希望可以起到参考价值。
  这里使用的编译环境为 gcc/g++ 4.3.3 for ubuntu 9.04
数组名和指针的问题
  这绝对是教材问题!现在国内有太多教材灌输“数组名相当于指针”的概念了!于是纷纷有人把数组名和指针等同起来,认为数组名其实就是一个指针。久而久之,许多新手已经不知道还有一种数据类型叫做“数组”了。
  对于这个问题首先应该从概念上澄清,坚定不移地把数组和指针这两种类型划清界线,认识到它们虽然有千丝万缕的联系,但其实是两种不同的数据类型。就如下面所看到的:
#include <iostream>
#include <typeinfo>
using namespace std;
#define gettype(id) (cout<<typeid(id).name()<<endl)
int a;
char arrChar[10];
char str1[] = "string";
char str2[] = "string?";
char *p1 = str1;
char *p2 = str2;
int main()
{
gett ......

C函数字典

@1$字符屏幕函数     Turbo C2.0的字符屏幕函数主要包括文本窗口大小的设定、窗口颜色的设置、 窗口文本的清除和输入输出等函数。     1.文本窗口的定义     Turbo C2.0默认定义的文本窗口为整个屏幕, 共有80列(或40列)25行的文本 单元, 每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字 符的颜色和强度。     Turbo C2.0可以定义屏幕上的一个矩形域作为窗口, 使用window()函数定义。 窗口定义之后, 用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超 出窗口的边界。     window()函数的调用格式为:      void window(int left, int top, int right, int bottom);     该函数的原型在conio.h 中 (关于文本窗口的所有函数其头文件均为conio.h, 后面不再说明)。 函数中形式参数(int left,  int top)是窗口左上角的坐标, (int right, int  bottom)是窗口的右下角坐标, 其中(left,  top)和(right, bottom) 是相对于整个屏幕而言的。 Turbo C 2.0规定整个屏幕的左上角坐标为 (1, 1), 右下角坐标为(80, 25)。并规定沿水 ......

C extern

++中extern - -                                      作者:宋宝华  e-mail:21cnbao@21cn.com 出处:太平洋电脑网1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。2.从标准头文件说起某企业曾经给出如下的一道面试题:面试题为什么标准头文件都有类似以下的结构?   #ifndef __INCvxWorksh   #define __INCvxWorksh   #ifdef __cplusplus   extern "C" {   #endif   /*...*/   #ifdef __cplusplus   }  ......
总记录数:2015; 总页数:336; 每页6 条; 首页 上一页 [327] [328] [329] [330] [331] [332] [333] [334] [335] 336  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号