C学习
指针
1、指针是一个变量
2、通过指针改变变量a的值
int main()
{
int a=10;
int *p=null;
p=&a;
*p=100;
return 0; }
3、在C语言中 * 有3个含义:a * b =c //乘
int *p //声明p是一个整型类型的指针(理解时从右向左)
* p //指向
4、指针有两个值:自身的值和指向的值
5、*ip 指向b, 就是对b的操作。
6、指针的大小 (double 类型) 和编译器所选的环境有关
win32->32bit->4
x64 ->64bit->8
结构体
7.结构体:一种数据类型
Struct Student
{
char s_id[10];
char s_name[20];
int s_age;
};
int main()
{
//定义变量
int a=10;
Struct Student x={“20201”,“li”,19};
//输出打印
printf("%d",a);
printf(“id: %s\n”,x.id);
}
输入与输出
8、printf 就是向这个文件件输出数据 stdout(标准输出)->显示器;
scanf 就是从这个文件读取数据 stdin(标准输入)->键盘
stderr(标准错误文件):无缓冲,会直接输出;printf 会先在行缓冲,在输出。
typedef
9、typedef : 把一切合法的变量名的定义或声明通过typedef 转换成一个类型名。
10、typedef int *PIN
PIN a,b; === int *a,*b;
11、typedef 与#define PIN int *的区别
12、typedef 定义简单的别名
typedef Struct Student
{
char s_id[10];
char s_name[20];
int s_age;
}Stuyn;
等价于
Struct Student
{
char s_id[10];
char s_name[20];
int s_age;
};
typedef Struct Student Stuyn;
Static
13、当函数内的变量加上static 关键字后,他从栈区移到了数据区(.data),它的生存周期不受函数的影响
int fun ()
{
int a=0;//a,b 变量在栈区,当函数结束会被释放
int b=0;
++a;
++b;
printf("%d%d",a,b);
}
int main()
{
int i=1;
while(i<5)
{
fun();
i++;
return 0;
}
当加上 static int a =0 时,a被放在了数据区,它的生存周期不受fun函数的影响。
静态关键字修饰局部变量 :可见性不变,生存期改变到在.data区;修饰全局变量:可见性变为本文件,生存期不变在.data区
extern 全局变量和函数在另一个文件中使用给出的声明。
const
const 定义的变量是常变量。是可读不可写。只具有右值性质不具有左值性质。
const可以修饰变量,也可以修饰数组。不论是变量还是数组,加上const 的变量一定要初始化。只可读不能被修改。
声明与定义
声明不分配内存空间,定义分配了内存空间