听了个讲座

来源:互联网 发布:美国网络运营商 编辑:程序博客网 时间:2024/06/10 23:24

大概讲了以下几点:
1.C语言的volatile关键字,用于修饰变量,多见于多线程编程。
由于硬件的寄存器/Cache/内存层次结构,使得执行时,之前被使用过的变量一般都被缓存在
寄存器中以加快下次的存取。这带来了数据一致性问题,即内存中的数据与寄存器中的不一
致,在多线程环境下,可能有多个进程共同使用一个变量并以此进行同步,就产生了问题。
volatile关键字的作用是告诉编译器,每当程序使用到这个变量的时候,都要去访问存储器,而
不是访问之前调入那个变量的寄存器,以保证能收到其他进程改变这个变量的信息。
示例:volatile int i;

2.include可以任意使用,其实就是在预编译的时候把包含的文件内容拷贝过来。
示例:
 int array[2][2] = {
#include"cc.txt" 
 };
其中cc.txt的内容为"1,2,3,4"。可以想像,如果这个数组很大的话,把值写在一个文件里再包含
进来还是挺方便的,修改起来方便,程序看起来也更简洁。

3.指针与引用的问题,指针可以指来指去,而别名(引用)只能指向唯一的那个变量。
回来后test了一下:
 int k = 1;
 int c = 3;
 cout<<&k<<endl<<&c<<endl;
这段程序的输出是:
0012FF7C
0012FF78
可以发现是顺序分配的。有趣的是k的地址比c的大4,说明是分在了栈里(自下而上),尽管
是在main函数里,windows还是把它视为一般的函数而用栈来保存它的变量。
稍改一下,声明为静态变量看看:
 static int k = 1;
 static int c = 3;
 cout<<&k<<endl<<&c<<endl;
可以发现这回是从上到下顺序分配了:
00473DC0
00473DC4

再看指针的加法运算,加入
 int * p = &k;
 cout<<p<<endl;
 p = p+1;
 cout<<p<<endl;
可以发现p从00473DC0加一后变为00473DC4,即指针的加法是根据其类型判断的,这里p
指向4个字节的int类型,所以p=p+1实际上加了4。

4.利用指针来越界访问数组,这个没有太听懂,以后有机会再补充。

5.使用命令行编译VC工程
F:/C盘转移/My document/Visual Studio Projects/compiler1>msdev compiler1.dsp /make
Building default target: compiler1 - Win32 Debug
--------------------Configuration: compiler1 - Win32 Debug--------------------

compiler1.exe - 0 error(s), 0 warning(s)

F:/C盘转移/My document/Visual Studio Projects/compiler1>

6.在自己声明的头文件中,必须使用条件包含,以便多个文件要包含此头文件时不会出错:
#ifndef cc
#define cc
...
#endif
而且最好不要在头文件里声明变量如int i;否则多重包含时会出错。如果确实要在多个文件
中共享变量,而且想包含在这个头文件里的话,可以声明为静态变量static int i;

原创粉丝点击