/*
*秒表练习
*了解库函数sleep() time()
*
*/
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main()
{
int start = time(0);//time(0)返回值是现今与1970年1月1日0时0分0秒(0时区)的秒数
while(1) {
printf("%d\r", time(0) - start);//注意printf打印输入字符流时候,首先是将输出字符放入输出缓冲区,当输出缓冲区中有换行符时候才会打印到屏幕
fflush(stdout);//立即打印输出缓冲区中的字符流
sleep(1);//库函数sleep实现让当前程序休眠一秒钟
}
return 0;
}
/*
* const type-specifier练习
*
* */
#include <stdio.h>
int main()
{
const int value = 0;
printf("value是%d\n", value);
//value = 3;//编译报错,const 类型修饰符只能在初始化时候放入数据,一旦初始化完成就不能再放入数据。也就是说变量value不再改变。
//value++;
printf("value是%d\n", value);
return 0;
}
/*
* 静态局部变量练习
* */
#include <stdio.h>
void f()
{
//int value = 0;
static value = 0;//静态局部变量在程序一开始运行时就被创建了,直到整个程序运行结束才会被销毁。静态局部变量具有静态生存期。
/*static类型修饰符修饰局部变量时可以实现改变变量的生存期,但无法改标识符在源程序中的作用域和可见性。
*static类型修饰符修饰全局变量时可以实现改变变量的作用域。*/
printf("f()中value是%d\n", value);
value++;
}
int main()
{
f();
f();
return 0;
}
/*
* 函数返回指针类型数据
*
*
* 指针变量可以作为函数返回值使用,只能把全局变量的地址、静态局部变量的地址或者通过参数获得的地址当做返回值使用。普通局部变量因生存期问题导致使用普通变量的地址作为返回值非常危险,所以绝对不要讲普通局部变量的地址作为返回值使用。
*
* */
#include <stdio.h>
int *func()
{
static int value = 0;
printf("value是%d\n", value);
return &value;
}
int main()
{
int *p_value = NULL;
p_value = func();
printf("p_value = func(); *p_value是%d\n", *p_value);
*p_value = 7;
func();
printf("*p_value是%d\n", *p_value);
return 0;
}