
C
文章平均质量分 60
sooolo
这个作者很懒,什么都没留下…
展开
-
字符数组和字符指针在分配内存时的差别
char str1[]="abc"; char str2[]="abc"; char str3[]="abc"; char str4[]="abc"; const char* str5="abc"; const char* str6="abc"; cout cout cout 答案:FALSE,FALSE,TRUE。 原因: (1)系统为转载 2012-05-31 11:56:16 · 798 阅读 · 0 评论 -
函数指针和指针函数
在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量转载 2013-03-11 20:58:10 · 702 阅读 · 0 评论 -
指针与数组
指针与数组:/*******************指针与数组**********************///一维数组#includevoid change(int *p);void main(){ int a[]={1, 2, 3}; change(a); for(int i=0; i<3; i++) { printf("%d\n",原创 2013-03-12 20:40:25 · 730 阅读 · 0 评论 -
C语言中的字对齐
一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果转载 2012-06-24 15:18:07 · 1181 阅读 · 0 评论 -
VC下自建头文件和.c文件
自己编写工程时,需要用到自己写的头文件和多个自己写的.c文件,这时候要理顺几个文件之间的关系,举例说明:为减少程序复杂程度对此次实验的影响,写一个简单的工程。 工程multi_files中包含两个.cpp文件和一个.h文件: multi_files.cpp为主函数所在的文件:注意,头文件sub_func.h要用双引号而不能用尖括号!multi_files.cpp原创 2013-03-14 21:47:13 · 1272 阅读 · 0 评论 -
文件操作
记录日志时经常要用到文件操作,举例说明:#include "stdio.h"#include "stdlib.h"void main(){ char bufferdes[100] = "\0"; //能否在后面用buffer = (char *)malloc(sizeof());来动态申请是个问题 char buffersource[100] = "\0"; in原创 2013-03-16 20:20:41 · 803 阅读 · 0 评论 -
宏:#与##
1 #运算符 宏定义可以包含两个运算符:#和##。编译器不会识别这两种运算符相反,它们会在预处理时被执行。 #运算符将一个宏的参数转换为字符串字面量。它仅允许出现在带参数的宏的替换列表中。 (一些C程序员将#操作理解为“stringization(字符串化)”;其他人则认为这实在是对英语的滥用。) #运算符有大量的用途,这里只来讨原创 2012-08-23 22:35:40 · 689 阅读 · 0 评论 -
结构体指针
在引用结构体指针的时候,只能在两种情况下通过三种方式实现。不能有其它臆想的方式。利用结构体名作为实参、结构体指针作为形参,以调用函数的方式可以实现对结构体成员的改变。例子://用结构体名作为调用函数的参数#include typedef struct { int a; int b; }Test;int Change(Test *原创 2013-03-17 21:50:54 · 1031 阅读 · 0 评论 -
通过形参和返回值改变主函数的参数
我们知道,调用子函数可以通过形参改变实参的值(传址,归根结底是传值。)。通过子函数返回值也可以达到子函数改变主函数参数的目的。而现在将两种方式结合在一起,通过一个子函数,来实现形参改变实参和返回一个值这两个目的。例子:#include "iostream"using namespace std; //如果头文件是iostream.h则不需要此句int Change(int *p原创 2013-03-16 22:14:20 · 2904 阅读 · 0 评论 -
内置类型和结构体类型作为函数参数传递时的共同点
结构体类型不同于数组,而结构体类型与内置类型有很多相同之处。数组名代表数组的第一个元素的地址,而结构体名代表的却不是地址而是第一个元素的值。在作为函数参数时,和内置类型一样,可以通过值(结构体名)、引用、指针几种方式传递。而且其传递特点与内置类型一致,例子:#include using namespace std;typedef struct Change{ in原创 2013-03-18 20:12:25 · 1631 阅读 · 0 评论 -
指向多维数组的指针
以指向二维数组的指针为例,此指针应该是型如:(*p)[#],其中#为一常数。注意其中的括号不能省略,否则变成*p[#]表示的是#+1行的第一个元素。更不要把**p当成指向二维数组的指针,**p是指向指针的指针。而指向二维数组的指针其实是指向一维指针数组的指针,而这个一维数组中存放着指向一维数据的指针。举例说明:#include using namespace std;v原创 2013-03-15 21:47:03 · 996 阅读 · 0 评论 -
__stdcall等调用规约
__stdcall: _stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回转载 2013-04-22 15:08:15 · 1485 阅读 · 0 评论 -
LIB&DLL
什么是lib文件,lib和dll的关系如何(1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有 dll文件,那么对应转载 2012-08-29 21:32:54 · 533 阅读 · 0 评论 -
指向指针的指针
1.通过指向指针的指针可以用一般的子函数来实现动态内存的分配:#include#includevoid quirmem1(int **pp, int n);int main(){ int *p=NULL; quirmem1(&p, 2); *p=123; printf("%d\n", *p); return 0;}void quirmem原创 2013-03-11 20:57:03 · 793 阅读 · 0 评论 -
代码在内存中的分配
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。从低地址到高地址,可分为下面几段: 预留内存地址(操作系统维护的内存地址,不可访问) 程序代码区(只读,存代码和一转载 2013-03-05 18:18:44 · 993 阅读 · 0 评论 -
结构体的内存分配(sizeof)
(1)先是定义了如下结构体: struct{ char a; int i; double d; }text; 然后用sizeof(text),预期结果是1+2+8 = 11???如果这样想就错了,答案是16.(2)然后,换一下变量的顺序: struct{转载 2013-01-16 13:48:30 · 862 阅读 · 0 评论 -
sizeof(二)
有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:struct T{ char ch; int i ;}; 使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是转载 2012-06-13 21:29:02 · 607 阅读 · 0 评论 -
sizeof(一)
0.关键字:sizeof,字节对齐,类型大小前向声明: sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰. 小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。 但当我总结的时候才发现,这个问题既可以简单,又可以复杂。所以本文有的地方并不适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”转载 2012-06-13 21:22:12 · 573 阅读 · 0 评论 -
Linux C 经典题目
【第一部分 C基本概念】【几个关键字】1)、auto关键字: 声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。不明白?无视他好了,编译器默认的缺省情况下,所有的变量都是auto的。2)、extern关键字: 我们都知道,一个变量或函数,可以在a.c文件中定义,而在b.c文件中使用,这个时候,b.c就需转载 2012-06-13 21:10:33 · 1038 阅读 · 0 评论 -
sizeof(三)
如何计算结构体的大小作者:曾宏安,华清远见嵌入式学院高级讲师。运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间转载 2012-06-14 18:21:24 · 910 阅读 · 0 评论 -
sizeof(四)
以下的代码可放在VC++6.0里面运行。题目是要求输出:TrendMicroSoftUSCN然后要求修改程序,使程序能输出以上结果.代码如下:#include #include using namespace std;int main(int argc,char * argv[]){string strArr1[]={ “Trend “, “Micro “, “soft原创 2012-06-16 23:17:28 · 1551 阅读 · 0 评论 -
sizeof(五)
一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的: sizeof Operator sizeof expression_r_r The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (inclu转载 2012-06-24 15:10:58 · 795 阅读 · 0 评论 -
volatile关键字
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic var转载 2012-07-03 16:04:55 · 546 阅读 · 0 评论 -
near far huge
near指针和far指针在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。 near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。 far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1转载 2012-08-22 11:36:10 · 741 阅读 · 0 评论 -
sizeof
VC中下面几个结构体大小分别是多少呢struct MyStruct{ double m4; char m1; int m3;};struct MyStruct { char m1; double m4; int m3;};#pragma pack(push)//保存对齐状态#pragma pack(1转载 2012-11-12 15:08:41 · 472 阅读 · 0 评论 -
vc 命令行下运行
大多数MS Visual C++创建的程序用VC编译器是很容易编译并创建出可执行文件的。但有时,你可能需要从命令提示行运行程序。这个例子将阐述如何用命令行编译创建VC程序。VC默认安装成功后,并不具备能从命令行编译创建VC程序这一特征。我们必须做如下3步工作:1 打开DOS命令提示符窗口。2 在C盘根目录下输入:CD Program Files\Microsoft Visual S转载 2012-12-14 15:16:36 · 2533 阅读 · 0 评论 -
dos下编译VC文件
●以 Visual C++ 为例以 Visual C++ 为例,先上一副图来显示安装完成CL 命令的图片此时编译文件,比如E盘中的adaboost.cpp,(在命令行中输入cl adaboost.cpp)则如下图,生成adaboost.obj和adaboost.exe ———————————下面来说明如何配置———转载 2012-12-14 15:48:18 · 953 阅读 · 0 评论 -
VC6.0
vc6.0 打开文件的时候出现Microsoft Visual C++:MSDEV.EXE 应用程序错误分类: 编程 2012-01-04 11:06 681人阅读 评论(3)收藏 举报 使用过Microsoft Visual C++6.0的朋友可能有过这样的经历:用VC6.0可以新建文件和工程,也能打开工作空间,但就是不能打开文件。打开文件时会弹出M转载 2012-08-28 21:48:30 · 948 阅读 · 0 评论