您的位置:首页 > 编程语言 > C语言/C++

C语言深度剖析笔记(1)

2010-01-26 16:08 302 查看
1.定义声明区别。
定义:编译器创建了一个对象,并给他分配内存,这个名字一旦和这块内存配起来,就同生共死,终生不离不弃。
声明:首先告诉编译器这个名字已经匹配到一个内存上了,下面代码用变量或者在别的地方定义的;告诉编译器这个名字我先预定了,别的地方不能用它作为变量或者对象名。
2.register修饰注意点。
register必须是被CPU寄存器所接受的类型。这个意味变量必须是一个单个值,长度小于等于整形长度。由于register不放在内存中,所以不能用&取地址符来获取地址。
3.static分静态全局变量,静态局部变量。
全局:仅限于变量定义的文件中(从定义开始,到文件结尾处结束),其他文件即使使用extern声明,也没办法使用它。想要使用就得在前面加extern。
局部:在函数体里面定义的,就只能在这个函数里应用,同一个文档的其他函数也用不了。但即使这个函数运行结束,这个变量的值不会销毁,下次仍能使用这个值。
4.sizeof并非函数。
int i=0;
sizeof(int);//不可以省略()
sizeof(i);sizeof i;//可以省略
sizeof int;//报错
double *p=NULL;
sizeof(p);//4,如果是sizeof(double)结果为8
sizeof(*p);//8
int a[100];
sizeof(a);//400
sizeof(a[100]);//4
sizeof(&a);//400
sizeof(&a[0]);//4
int b[100];
void fun(int b[100])
{
sizeof(b);//4
}
5.计算下面函数结果
char str[1000];
int i;
for(i=0;i<1000;i++)
str[i]=-1-i;
printf("%d /n",strlen(str));
//255
6.如何比较浮点型数是否为0?
float fTestVal=0.0;
A.if(fTestVal==0.0) if(fTestVal!=0.0)
B.if(fTestVal>=-EPSINON)&&(fTestVal<=EPSINON)//看是否为0
7.如何比较指针变量和0?
建议写法if(NULL==P) if(NULL!=p)
8.没有返回值的函数,系统默认为是返回整形,而不是void型
9.return返回什么?
在VS中错误
10.const和宏的区别。
#define M 3
const int N=5;
int i=N;//给N分配内存,以后不分配
int I=M;//给M分配内存
int j=N;//不给N分配内存
int J=M;//再一次给M分配内存
11.const修饰,老生长谈。
const int *p===============int const *p //p可以修改,p的值不能修改
int *const p//p不可以修改,p的值可以修改
const int *const p
extern const int i=10;//错误,因为引用外部的const变量,不能修改这个变量
12.volatile关键字。
它的作用是使编译器催访问该变量的代码不进行优化,从而可以提供对特殊地质的稳定访问。
int i=10;
int j=i;//1.
int k=i;//2.
在1,2中i没有被用作左值,这个时候编译器认为i的值没有发生改变,所以在1语句从内存中取出i的值付给j之后,这个值并没有丢掉,而是直接在2语句中赋给了k,而不是重新从内存中取出i,这样提高了效率。
如果把赋值改成volatile int i=10;则会每次运行时都会从内存中重新提取i值。
const volatile int i=10有没有问题,如果没有那i到底是什么属性。
13.空结构体大小为1
14.typedef用法。
typedef struct student
{}Stu_st,*Stu_pst;
A),struct student stu1=========Stu_st stu1
B),struct studnet *stu2========Stu_pst stu2========Stu_st *stu2
C),const Stu_pst stu3;//const修饰的是一个Stu_pst指针,所以应该是const指针,stu3本身值不可以变,它指向的值可以改变
typedef struct student
{
int i;
}Stu_st,*Stu_pst;
Stu_st b,c;
b.i=5;
c.i=6;
const Stu_pst p=&b;
//p=&c;error
(*p).i=7;
D),Stu_pst const stu4;
15.typedef和#define区别
E),#define INT32 int
unsigned INT32 i=10;//正确
F),typedef int int32;
unsigned int32 j=10//错误,typedef没有这种类型扩展。
G),#define PCHAR char*
PCHAR P3,P4;//p4 is not a pointer
H),typedef char* pchar;
pchar p1,p2;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: