文章分类 - C/C++
摘要:学过程序语言的人相信对关键字并不陌生。偶然间翻起了《C++ Primer》这本书,书中列举了所有C++的关键字。我认真核对了一下,竟然发现有若干个从未使用过的关键字。一时间对一个学了六年C++的自己狠狠鄙视了一番,下决心一定要把它们搞明白!图1红色字体给出的是我个人感觉一般大家都会比较陌生的关键字,下边我们逐个学习。图1 C++ 关键字一、typeid从名字直观看来,该关键字应该是获取语言元素的类型ID。其实它和sizeof类似,是一个类型运算符。有时候代码可能需要获取某个变量或者类型的名字,这时候使用typeid就比较合适。使用格式:typeid(int)或typeid(i+1)这样操作后.
阅读全文
摘要:好吧,头文件是干嘛的?放心,这个简单的问题确实把我难住了。用了多少年头文件,头文件是干嘛用的?第一,头文件是给别人看得。第二,头文件可以用来进行类型检查,减少出错。好吧,第二点我似懂非懂,所以只说第一点。再配合extern。他们俩在一起很万恶的。真的哦!头文件是给别人看的。不管是C还是C++,你把你的函数,变量或者结构体,类啥的放在你的.c或者.cpp文件里。然后编译成lib,dll,obj,.o等等,然后别人用的时候 最基本的gcc hisfile.cpp yourfile.o|obj|dll|lib 等等。ok,他们怎么知道你的lib,dll...里面到底有什么东西?要看你的头文件。你的.
阅读全文
摘要:---------------------------------------------------- | 问题描述一:(分析scanf()和getchar()读取字符) | ----------------------------------------------------scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。下面先看一个很简单的程序: 程序1: #include int main() { char ch1, ch2; scanf("%c"
阅读全文
摘要:标准I/O函数库: C标准库提供了文件的标准 I/O 函数库,相比前述的系统调用,主要差别是实现了跨平台的用户态缓冲的解决方案。标准I/O库使 用简单,与系统调用I/O相似,也包括打开、读写、关闭这些操作,主要的函数列举如下。 ◆ 打开与关闭文件:fopen,fclose。 ◆ 读写文件:fread,fwrite。 ◆ 读写文本行:fgets,fputs。 ◆ 格式化读写:fscanf,fprintf。 ◆ 标准输入输出:printf,scanf。 ◆ 读写字符:fgetc,getc,getchar,fputc,putc,putchar。 ◆ 其他:fflush,fseek。 所谓...
阅读全文
摘要:查看 stdio.h 可以看到如下定义:#define EOF (-1)#define _IOEOF 0x0010#define feof(_stream) ((_stream)->_flag & _IOEOF)由此可以看出,这两种方式的原理是不同的。在这里先说下EOF和feof()这个两个宏定义,在我们学的课本中有这样的描述。EOF是不可输出字符,因此不能在屏幕上显示。由于字符的ASCII码不可能出现-1,因此EOF定义为-1是合适的。当读入的字符值等于EOF 时,表示读入的已不是正常的字符而是文件结束符,但这适用对文本文件的读写。在二进制文件中,信息都是以数值方式存在的。EO
阅读全文
摘要:一).一般问题 二进制文件与我们通常使用的文本文件储存方 式有根本的不同。这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。这样的 编辑器有很多,在我们的CVF附带的集成开发环境下就可以(将二进制文件拖动到IDE窗口后松开)。VisualStudio2005也是 可以的。(不过需要在File菜单下Open,File) 另外推荐一款使用较多的软件,叫做UltraEdit(以下简称UE)。是很不错的文本编辑器,也能做十六进制编辑器使用。 为什么要用十六进制编辑器?而不用2进制呢?因为2进制实在太小,书写起来会很长,很不...
阅读全文
摘要:C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:reinterpret_cast该函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指针类型的转换.例://基本类型指针的类型转换double d=9.2;double* pd = &d;int *pi = reinterpret_cast<int*>(pd); //相当于in
阅读全文
摘要:谭浩强老师的《C语言程序设计》第二版,page211页,有这样一段话:引用数组元素可以用下标法,也可以用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。每次看到这个地方我都有点不解。后来在VC6.0环境下想了个实验办法,编写一个简单的控制台程序,利用反汇编工具察看编译后的代码,发现好像不是这样子的。从下面代码看,好像利用指针访问数组元素要比下标法要慢。代码如下:#include <stdio.h>void main(){ int i; int a[10]={10,20}; int *b=a; printf("%d&qu
阅读全文
摘要:有待商榷在C++中,申请和释放堆中分配的存贮空间,分别使用new和delete的两个运算符来完成: 指针类型 指针变量名=new 指针类型 (初始化); delete 指针名; 例如:1、 int *p=new int(0); 它与下列代码序列大体等价: 2、int tmp=0, *p=&tmp; 区别:p所指向的变量是由库操作符new()分配的,位于内存的堆区中,并且该对象未命名。 下面是关于new 操作的说明 :部分引自<<C++面向对象开发>> 1、new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,
阅读全文
摘要:一.本质区别 sizeof 和 strlen 有本质上的区别。sizeof 是C 语言的一种单目运算符,如++ 、-- 等,并不是函数,sizeof 的优先级为2 级,比/ 、% 等3 级运算符优先级高,sizeof 以字节的形式给出操作数的存储空间的大小。而strlen 是一个函数,是由C 语言的标准库提供的。strlen 计算的 是字符串的长度。 二.使用区别 1.sizeof sizeof 的操作数可以是数据类型、函数、变量,表达式使用方式为: (1)数据类型 sizeof (type ) 例如我们要计算一个int 型数据的存储空间可以用:sizeof (int)。需要注意的是 size
阅读全文
摘要:UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别。open和fopen区别1.系列是标准的C库函数;open系列是 POSIX 定义的,是UNIX系统里的system call。也就是说,fopen系列更具有可移植性;而open系列只能用在 POSIX 的操作系统上。2.使用fopen 系列函数时要定义一个指代文件的对象,被称为“文件句柄”(file handler),是一个结构体;而open系列使用的是一个被称为“文件描述符” (file descriptor)的int型.
阅读全文
摘要:memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。第二种情况下,问题出现在右边的两个字节,这两个字
阅读全文
摘要:题目:给出一个单链表,不知道节点N的值,怎样只遍历一次就可以求出中间节点,写出算法。解析:设立两个指针,比如*p和*q。p每次移动两个位置,即p=p->next->next,q每次移动一个位置,即q=q->next。当p到达最后一个节点时候,q就是中间节点了。类似的可以用一次遍历方法得到三分之一、四分之一、前几个节点。代码贴出:#include <iostream> using namespace std; typedef struct Student{ int data; struct Student *next; }Node; /* * 遍历一遍就得到单链表的
阅读全文
摘要:C语言真是很灵活,今天发现结构中函数指针的应用,就查了些资料总结一下。其实在结构体已经和C++中的类功能差不多,只是其是面向过程,没有了作用域的要求,如public等你可以在结构体中定义函数函数指针,然后对其调用和类调用方法一样,在调用时对其赋值(你要调用的指针),这样看来,C也可以临时客串一下面向对象了。呵呵.大家可以试一下. 1 #include<stdio.h> 2 struct square 3 { 4 int length; 5 int width; 6 int height; 7 int (*add)(int a,int b); 8 }; 9 int square_ad
阅读全文
摘要:解析:在这里声明,简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单的用于增加一员操作数,答案是明确的,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁在二者之间制造任何差异。我们看看下面这个程序: #include <stdio.h> int main() { int i = 0; int x = 0; i++; ++i; x = i++; x = ++i; return 0; }上面的代码在VC 6.0上编译得到的
阅读全文
浙公网安备 33010602011771号