C/C++深层探索
一、
1、关于字节顺序:话说在特定的硬件平台上,多字节数据的顺序存放有两种方式(little-endian、big-endian)。前者的数据的低字节
部分存放在低地址内存,后者恰好相反。PC一般是基于IA-32微处理器,属于little-endian。某些RISC架构的CPU,例如SPARC、
POWERPC等,则属于big-endian。
2、调用函数、栈,变量的可见范围与生命期:我们知道一个程序由数据和代码两大部分构成,而数据有几种类别,一种是“静态”的,也就
是说在整个程序运行期间,它在内存中的地址是固定的,代码可以对其反复访问。C语言中的外部变量,内部静态变量就属于此类,存储
于数据段(这些数据的地址在程序进行链接的时候就能准确算出)。另一种是“动态”的,他们在内存的地址不是固定的,对他们的操作
就是对“栈”进行操作。
3、变量的声明和定义: “声明”只是告诉编译器某个标识符是:变量(什么类型?)还是函数(参数和返回值是什么?)。要是在后面的
代码中出现该标识符,编译器就知道如何处理。声明变量不会导致编译器为这个变量分配存储空间。
4、编译与链接: 编译程序要做的事之一就是把所有需要确定地址的符号记录下来,然后链接程序在找到它们的定义点之后通过计算给予
合适的地址。当所有的符号都有确定的地址时,链接程序就能够产生可执行文件。如果还有符号不能确定地址(找不到定义或重复定义)
链接程序就会报错。
5、外部变量的链接性质与静态内部变量: 外部变量默认链接性质是外部的(extern),static改变外部变量的链接性质,使外部变量的
链接性质是内部的。而对于内部变量,static改变的是其存储性质,使其可见范围不变,生存期为程序运行期间。
6、函数的声明、定义与链接性质:
7、使用头文件: 头文件应该包含:函数原型声明,全局变量的声明,自己定义的宏和类型;
不应该包含:全局变量和函数的定义(全局变量只能定义一次,如果你把“int global = 0;&rd
相关文档:
DllImport所在的名字空间 using System.Runtime.InteropServices;
[DllImport("User32.dll")]
public extern static System.IntPtr GetDC(System.IntPtr hWnd);
private void button19_Click(obj ......
1. C++虽然主要是以C的基础发展起来的一门新语言,但她不是C的替代品,不是C的升级,C++和C是兄弟关系。没有谁比谁先进的说法,更重要的一点是C和C++各自的标准委员会是独立的,最新的C++标准是C++98,最新的C标准是C99。因此也没有先学C再说C++的说法,也不再(注意这个"不再")有C++语法是C语法的超集的说法。
2. C++/CL ......
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
OPENFILENAME ofn;
//在内存中开辟一块空间,存放用户选取的文件名
char szFile[MAX_PATH];//MAX_PATH ......
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
OPENFILENAME ofn;
//在内存中开辟一块空间,存放用户选取的文件名
char szFile[MAX_PATH];//MAX_PATH ......