1、必须定义file *fp 或file fp。
2、dat文件可以存放文本文件。
3、extern之后就变成全局。可以一开始就extern,没有出现过也没有关系。
这个extern是最大的全局。不局限在两个文件之间。所有的文件都可以使用。一般的所谓全局变量作用域只是在自己的文件中。
5、&+普通变量表示地址,数组名就是地址,如果函数的形参是指针形式(即以地址形式传递参数),则需要&+普通变量或直接用数组名;如果函数的形参是非指针形式(即以值形式传递参数),直接用普通变量或数组名[ ];如果形参用的是int &x形式,则是以地址形式传递参数,但在调用函数时,只需要写入变量名而不需要在代入指针。(这样说可能不规范,但要好理解)。
6、对于这四个变量:
http://wenku.baidu.com/view/1dcb340cf12d2af90242e63d.html 这个百度文库中对此做了详细解释。你可以参考下。两三句话可能说不明白。这儿简单说:
从变量值存在时间(生存期)角度分:静态存储方式和动态存储方式。
从变量的作用域(空间)角度分:全局变量和局部变量。
在用户区的存储空间:
|程序区 |
|静态存储区|
|动态存储器|
静态存储方式程序运行期间系统分配固定存储空间,动态存储方式根据需求动态分配存储空间。全局变量都存放于静态存储区,动态存储区主要包括:函数的形参,在函数调用时分配存储空间;自动变量(未加static声明的局部变量);函数调用时的现场保护和返回地址等。
变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种。
Auto自动变量:函数中未加static的局部变量和形参都属于此类,调用函数时分配内存,函数结束时释放内存。一般隐藏auto默认为自动存储类别。我们程序都变量大多是自动变量。
Static变量:
局部变量:static声明的局部变量在函数调用结束后不释放存储空间,再次调用函数时该变量已经有值。其他函数时不能引用它的。Static局部变量时在编译赋初值,自动变量的初值是函数调用时赋的。所以局部变量不赋初始值的话static变量自动赋值0或在空字符。而自动变量的初值则是不确定的。最好不要直接使用。函数中需要保留上次调用时的值或者初始化之后变量只被引用而不改变的可以考虑用static局部变量,这样比较耗内存。
外部变量:(外部变量解释见extern外部变量),如果我们希望该外部变量只能在本文件内使用,而不能被其他文件引用可以在外部变量定义时加static声明。防止别人写的模块误用。
Register变量:动态和静态变量都是存放在内存中,程序中遇到该值时用控制器发指令将变量的值送到运算器中,需要存数再保存到内存中。如果频繁使用一个变量,比如一个函数体内的多次循环每次都引用该局部变量,我们则可以把局部变量的值放到CPU的寄存器中,叫寄存器变量。不需要多次到内存中存取提高效率。但是只能局部自动变量和形参可以做寄存器变量。在函数调用时占用一些寄存器,函数结束时释放。不同系统对register要求也不一样,比如对定义register变量个数,数据类型等限制,有的默认为自动变量处理。所以在程序一般也不用。
Extern外部变量:在函数外部定义的全局变量,作用域开始于变量定义,结束于程序文件的结束。我们可以extern来声明外部变量来扩展它的作用域。同一个文件内,extern声明之后就可以作用域扩大到声明处到文件结束。比如在一个函数之后定义外部变量a,之后的函数可以使用该变量,但是之前的函数不能使用,加extern可以解决。多个文件时,可以在未定义该外部变量的文件内做extern声明即可以使用。但是需要注意可能执行一个文件时改变了该全局变量的值,影响其他文件的调用。编译时遇到extern,会先在文件内找是否定义了该外部变量。如果未找到则在链接时在其他文件中找。
7、strcpy之后str1就和str2内容一样,但由于字符串碰到'\0'就认为是结束,所以说str1'\0'之前的和str2是一样的,之后的就无关紧要了。循环和输出的时候都是没有关系的,两个字符串长度也是一样的。
拿你题中例子来回就是strcpy之后 str1 = ”qwe\0efg",但是长度是3 ,输出也只是输出qwe。