![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++一般性问题
ryman
这个作者很懒,什么都没留下…
展开
-
extern使用方法总结!
#include "stdafx.h"1.extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:extern int f(); 和int f();===============原创 2005-01-29 12:04:00 · 12657 阅读 · 0 评论 -
Volatile用法总结
在大多数情况下,把变量缓存在寄存器中是一个非常有价值的优化方法,如果不用的话很可惜。C和C++给你提供了显式禁用这种缓存优化的机会。如果你声明变量是使用了volatile修饰符,编译器就不会把这个变量缓存在寄存器里——每次访问都将去存取变量在内存中的实际位置。1、中断服务程序中修改的供其它程序检测的变量需要加volatile;2、多任务环境下各任务间共享的标志应该加volatile;3原创 2008-02-29 13:50:00 · 2343 阅读 · 0 评论 -
sizeof使用方法--重要!!
自己的话:sizeof(int)等的大小依赖于操作系统的位数,如果是在16位DOS环境下,用TC编译,则为2,如果在windows环境下,用VC编译,则为4。第一个例子: char* ss = "0123456789";sizeof(ss) 结果 4 ===》它反映了操作系统的位数,windows是32位的。但是如果在16位DOS环境下,用TC编译,结果是2。sizeof(*ss) 结果 1 ==原创 2005-06-01 20:46:00 · 2257 阅读 · 0 评论 -
结构体数组使用方法
结构体数组 结构体数组与数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。结构体数组的定义 和定义结构体变量的方法相仿,只需说明其为数组即可。先定义结构体类型再定义数组名在定义类型的同时定义数组直接定义结构体类型数组struct 结构体名 { 成员表列 }; struct 结构体名 数组名; struct原创 2005-06-01 20:49:00 · 11152 阅读 · 0 评论 -
strcmp和strlen实现的源代码
int strlen(const char* str) { int i=0; while(*str++) i++; return i; } int strcmp( const char *string1, const char *string2 ) { int i; do{ i = (int)*string1 -(int)*string2; }while(*string1++ && *string原创 2005-06-01 20:47:00 · 5887 阅读 · 6 评论 -
堆和栈的区别 (可能做为笔试题目)
堆和栈的区别 一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(st原创 2005-04-16 13:30:00 · 1560 阅读 · 0 评论 -
提取四位数的千位,百位,十位,个位
// bit.cpp : Defines the entry point for the console application.///*x-->千位y-->百位z-->十位w-->个位*/#include "stdafx.h"#include "stdio.h"int main(int argc, char* argv[]){ int i=5687; int x,y,z,w; x=i/1000;原创 2005-04-03 23:25:00 · 12986 阅读 · 0 评论 -
运算符优先级
C++/C语言的运算符有数十个,运算符的优先级与结合律如表4-1所示。注意一元运算符 + - * 的优先级高于对应的二元运算符。 优先级运算符结合律 从 高 到 低 排 列( ) [ ] -> .从左至右! ~ ++ -- (类型) sizeof+ - * &从右至左 * / %从左至右+ -从左至右 >>从左至右 > >=从左至右== !=原创 2005-03-29 18:20:00 · 978 阅读 · 0 评论 -
经典的“冒泡”排序法
// maopao.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"int main(int argc, char* argv[]){ int a[]={5,6,8,3,1,4,7,9}; int i,j,t; for (i=0;i//7为需要排列的数的原创 2005-04-03 23:17:00 · 1027 阅读 · 0 评论 -
回调函数概念
回调函数用于层间协作,上层将本层的一个函数的地址保留在下层(这个函数就是回调函数),而下层在一定条件下触发回调函数,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将通过回调函数地址调用该函数,这样就将这个数据交给上层应用层的函数来做进一步处理。这在分层的数据通信中很普遍。回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这原创 2005-02-25 19:58:00 · 2140 阅读 · 0 评论 -
汇编中的assume
"在数据段中定义的每一个变量标志符其实都代表了一个偏移量(也称为有效地址),这个偏移量与数据段段值相结合就指向某个内存地址。在程序中使用ASSUME伪指令是用来指明一个默认的段地址。一旦你把某个数据段的段名指定给某个段寄存器(比如ASSUME DS,DATA1),这之后当你使用这个数据段(DATA1)内定义的变量,编译程序就自动把它与这个段寄存器(DS)里的段值(表示一个段地址)结合起来使用。转载 2009-10-19 19:22:00 · 2989 阅读 · 1 评论