最近在看传智播客的视频,感觉学起语言来事半功倍啊,咱们国人真厉害啊,中国迟早在很多方面都会超越美国,除了环境,不知道有生之年能否看到?
废话少说,今天学了c语言的变量类型,首先关于静态变量,它与java的静态变量是不同的,java的静态变量是属于类的,其次,静态全局变量和静态局部变量也不同,虽然它们的生命周期一样,但局部变量是在函数调用时才创建,直到程序结束,而全局变量都是静态变量,且在程序运行之前创建。然后,静态变量和自动变量(动态变量)的区别是自动变量属于堆栈,而静态变量放在静态内存中。
register修饰的是寄存器变量,只能修饰自动变量,只限于int, char和pointer变量使用;register的发音很多老师都发错了,重音在前面;
extern / intern 外部函数 和 内部函数,c语言规定,不允许有同名的外部函数;auto/extern
c语言里外部函数只要声明就能用,把声明可以放到头文件里,而php里是一定要include的;
static 即是静态,又是内部函数(静态函数),不能在其它文件中访问,不然链接报错,和java中public static void f1()也有区别;
在java中,全局变量的定义没有严格的位置规定;c语言不同,得定义在前面;
在c语言中,extern int a 是声明一个变量,而int a 是定义一个变量;
extern时(外部变量),多个文件中有相同的变量名,代表的是同一个变量;
static在其它文件中修饰全局变量会使之变成一个内部变量;
结构体
使用频率不亚于指针;不像面向对象的语言,结构体使没有方法的;
struct 结构体名{}; 机构体是类型,而不是变量,所以不分配内存;怎么计算一个结构体变量所占空间;
当函数的形参是指针事,传的实际上是地址,所以在c语言中,给字符串(数组)指定的形参是指针;
数组和结构体都要在定义的同时初始化;而不能单独统一初始化,只能一个元素一个元素地初始化;
结构体数组:数组的元素是结构体;
你传入数组,我改变数组成员;你传入对象,我改变对象成员;你传入函数,我改变函数成员;你传入结构体,我改变结构体成员;
怎么结构体传的是值,只是把结构体全部成员实参的值全盘复制给形参?只是成员之间的值传递?
指向结构体的指针
struct Person *p;
p = &person;
P->对着指针做->运算;