EOF是文件的结束标志,写全为end of file,即文件的结束标志,
在scanf语句中,读取失败的时候会返回EOF,如果读取正常,返回的是读取到的数据个数
int ret=scanf("%d",&a);
printf("ret=%d",ret);//输入100,这里输出的是1
可以用于多组数据输入!!!!
while(scanf("%d",&score)!=EOF)
register-寄存器
register int a=10;//只是建议放入寄存器,放不放在于编译器,在当下其实意义并不大
在计算机上数据可以存储在哪里??寄存器、高速缓存、内存、硬盘。
寄存器:字节。高速缓存:xxM。内存:8G/16G。硬盘:500G。网盘:2T。
关键字typedef
typedef unsigned int uint;
int main()
{
unsigned int age;
uint age2;//作用类似于取别名
return 0;
}
关键字static-静态的
三种用法:修饰局部变量、修饰全局变量、修饰函数。
void test()
{
int a=0;
a++;
printf("%d\n",a);
}
int main()
{
int i =0;
while(i<10)
{
test();
i++
}
return 0;
}//会打印10个1。
void test()
{
static int a=0;
a++;
printf("%d\n",a);
}
int main()
{
int i =0;
while(i<10)
{
test();
i++
}
return 0;
}//会打印1~10。
栈区:局部变量、函数参数、临时的变量(进入作用域创建,出了作用域释放,比如上面函数作用域里的a,就是出了作用域就被销毁的,返回作用域的时候又给了它一个初值0)
堆区:动态内存分配,malloc,realloc,calloc,free
静态区:静态变量、全局变量(放在静态区的数据创建后,直到程序结束才释放)
总结:普通的局部变量是放在栈区上的,这种局部变量进入作用域创建,出了作用域释放。但是局部变量被static修饰后,这种变量就放在了静态区,放在静态区的变量,创建好后,直到程序结束才释放。本质上:static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行结构不一样。注意:被static修饰不影响作用域,但是生命周期变长了。
全局变量本身是具有外部链接属性的,在A文件中定义的变量,在B文件中可以通过【链接】使用,但是如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性,使得全局变量的作用域变小,这个全局变量只能在自己所在的源文件内部使用。
修饰函数:
int Add(int x,int y)
{
return x + y;
}
extern int Add(int,int)//声明外部函数
int main()
{
int a =10;
int b =20;
int c =Add(a,b);
printf("%d\n",c)
return 0;
}
static int Add(int x,int y)
{
return x + y;
}
函数本身是有外部链接属性的,被static修饰后外部链接属性就变成了内部链接属性,使其作用域变小(与上面的全局变量类似)
指针:1.指针就是地址。2.口头语中,指针一般指的是指针变量。一个指针变量的大小取决于它存的地址,在32位机器上是32个bit位,指针变量存放的是32bit位地址,大小是四个字节!
解引用操作:*pa-作用就是通过pa中的地址,找到a,*pa就是a。
int a = 1;
int* pa=&a;//类型是int*,pa是变量名
*pa = 20;
int main()
{
int a = 10;
int* p = &a;
printf("%zd\n", sizeof(p));
return 0;
}
注意:%zd专门用来返回sizeof返回值。