
C/C++
文章平均质量分 68
zheng_xiaoxu
计算机学生哥
展开
-
常量指针 和 指针常量
常量指针 和 指针常量 在C++的学习中,有人经常搞不清楚“常量指针”和“指针常量”这两个概念。其实简单一点讲,“常量指针”所指向的地址上的数据是常量,而“指针常量”所指向的地址是常量,地址上面的数据是可以变化的。 下面看及格简单的例子,可以说明他们的区别: 第一个 1 void main(){ 2 char *str转载 2012-07-16 00:55:20 · 245 阅读 · 0 评论 -
位运算之左移右移运算之详解
转自:http://www.cnblogs.com/yyangblog/archive/2011/01/14/1935656.html代码 #include "stdio.h" char leftshift(char i, int n) { if(n < 0) return -1; return i<<n; } char ri转载 2012-10-02 12:40:25 · 1259 阅读 · 0 评论 -
指针使用面试题
1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p------------------转载 2012-10-01 09:32:45 · 458 阅读 · 0 评论 -
C语言内存分配管理(学习笔记)
一、堆和栈的区别程序的内存分配1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局原创 2012-10-01 00:03:30 · 863 阅读 · 0 评论 -
#define和typedef
原文:http://hi.baidu.com/%C9%DB%B7%C9/blog/item/9d54c1fc602ec7f5fd037f4a.html#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了。typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),它的新名字具有一定的封装性,以致于新命名转载 2012-08-24 13:09:49 · 303 阅读 · 0 评论 -
《C专家编程》学习笔记--位段结构
位段以位为单位定义结构体(或共用体)中成员所占存储空间的长度。结构中也允许存在位段、无名字段以及字对齐所需的填充字段。通过在字段的生命后面加一个冒号以及一个表示字段位长的整数来实现。 含有位段的结构体类型称为位段结构。位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。位段结构中位段的定义格式为:转载 2012-07-30 01:22:12 · 1173 阅读 · 0 评论 -
_alloc/malloc/calloc 内存分配的区别
_alloc原型:void *_alloc(size_t size);本函数与上述的两个函数不同,因为它是在栈上分配了size大小的内存,因此使用此函数分配的内存不用再担心内存释放的情况了。但是使用此函数需要注意的是:在函数内部使用此函数分配的内存随着函数的终结不复存在,因此不能将此函数分配的内存供函数外部使用。malloc原型:void * malloc(size_t原创 2012-08-05 01:27:54 · 604 阅读 · 0 评论 -
《VC++深入详解》学习笔记
创建一个Win32应用程序的步骤:1.编写WinMain函数,可以在MSDN上查找并复制; int WINAPI WinMain(...);2.设计窗口类;WNDCLASS WNDCLASS wndcls;3.注册窗口类; RegisterClass(&wndcls);4.创建窗口; CreateWindow(...);5.显示并更新窗口原创 2012-07-16 01:33:11 · 483 阅读 · 0 评论 -
C语言之详解#ifdef等宏
C语言之详解#ifdef等宏指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……转载 2012-07-16 01:03:46 · 1142 阅读 · 0 评论 -
指向多维数组的指针变量
指向多维数组的指针变量1 多维数组的指针多维数组可以看作是一维数组的延伸,多维数组的内存单元也是连续的内存单元。换句话说,C语言实际上是把多维数组当成一维数组来处理的。下面以二维数组为例说明这个概念。比如,现在有一个int型的二维数组a[3][4],计算机认为这是一个一维的数组a[3],数组的三个元素分别是a[0],a[1]和a[2]。其中每个元素又是一个一维数组,例如a[0]又是转载 2012-07-16 00:58:51 · 1102 阅读 · 0 评论 -
Printf()输出格式控制
1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法]转载 2012-07-16 00:54:24 · 627 阅读 · 0 评论 -
小技巧
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)先分析一下这个 宏的运行机理:一共4步 1. ((TYPE *)0) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &(((TYPE *)0)->MEMBER)取出数据成员的地址; 4.(si转载 2012-07-16 01:13:54 · 218 阅读 · 0 评论 -
《C与指针》学习笔记
start from P158 8.2.4 指向数组的指针 int vector[10], *vp = vector; //正确,vector和vp具有相同类型:指向整型的指针。int matrix[3][10], *mp = matrix; //错误,matrix不是指向整型的指针,而是指向整型数组的指针,mp是指向整型的指针。指向整型数组的指针该这么定义:i原创 2012-07-16 01:06:14 · 364 阅读 · 0 评论 -
C语言宏定义技巧(常用宏定义)
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef转载 2012-07-16 01:07:29 · 468 阅读 · 0 评论 -
C/C++程序中执行shell命令的2种方法
一、用system(const char * cmd)函数,必须包含头文件:#include system函数会调用fork()产生子进程,由子进程来调用/bin/sh -c来执行参数cmd的指令 调用/bin/sh时失败则返回-127,其他失败原因返回-1,如果cmd指针为NULL,则返回非零值 调用成功则返回shell命令后的返回值。 例子: char cm转载 2012-07-16 00:46:14 · 2973 阅读 · 0 评论 -
大头小头字节序
记住,书写方式是大头。****************************************************************************想要查看当前环境是高地址还是低地址可以使用联合体如:union str{int b;char a;};int main(){str s;s.b = '原创 2012-07-16 01:15:59 · 634 阅读 · 0 评论 -
讲讲volatile的作用
讲讲volatile的作用一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自转载 2012-07-16 01:14:50 · 320 阅读 · 0 评论 -
c++内存中字节对齐问题详解
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据转载 2012-07-16 01:05:28 · 506 阅读 · 0 评论 -
虚析构函数
《C++ Primer》中对于虚析构函数如此解释: 自动调用基类部分的析构函数对基类的设计有重要影响。 删除指向动态分配对象的指针时,需要运行析构函数在释放对象的内存之前清除对象。处理继承层次中的对象时,指针的静态类型可能与被删除对象的动态类型不同,可能会删除实际指向派生类对象的基类类型指针。 如果删除基类指针,则需要运行基类析构函数并清除基类的成员,如果对象实际是派原创 2012-10-04 23:12:38 · 438 阅读 · 0 评论