一、指针
1.内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
#include <stdio.h>
int main()
{
int a = 10;
//%p是指针的打印
printf("%p\n", &a);
return 0;
}
运行结果:
2.内存单元都有编号,这个编号就是地址,我们把这个地址也叫做指针
int main()
{
int a = 10;
int* pa = &a;//pa是用来存放地址的,所以我们把pa叫指针变量
return 0;
}
这个*告诉我们pa是一个指针变量,int告诉我们pa指向的对象是int型
int main()
{
//int a = 10;
//int* pa = &a;//pa是用来存放地址的,所以我们把pa叫指针变量
char ch = 'w';
char* pc = &ch;
return 0;
}
这个*告诉我们pa是一个指针变量,char告诉我们pa指向的对象是char型
3.变量是创建内存中的(在内存中分配空间的),每个内存单元都是有地址的,所以变量也是有地址的
#include <stdio.h>
int main()
{
int a = 10;
int* pa = &a;//pa是用来存放地址的,所以我们把pa叫指针变量
*pa = 100;
printf("%d\n", a);//打印100
char ch = 'w';
char* pc = &ch;//&取地址操作符
*pc='q';//*解引用操作符,它的意思就是通过pc中存放的地址,找到pc指向的内容
printf("%c\n", ch);//打印q
return 0;
}
4.指针变量的大小
//指针变量的大小取决于地址的大小
#include <stdio.h>
int main()
{
char ch = 'w';
int a = 10;
int* pa = &a;
char* pc = &ch;
printf("%d\n", sizeof(pa));
printf("%d\n", sizeof(pc));
//32位平台 指针大小是4个字节
//64位平台 指针大小是8个字节
return 0;
}
二、结构体
结构体是c语言中特别重要的知识点,结构体使得c语言有能力描述复杂类型。
比如描述学生,学生包含:名字+年龄+性别+学号这几项信息。
这里只能使用结构体来描述了。
方法1:直接打印
#include <stdio.h>
//结构体
//类型
struct Stu
{
char name[20];//名字是字符串
int age;//年龄是整数
char sex[5];//性别是字符串
char id[20];//学号是字符串
};
int main()
{
//结构体变量
struct Stu s1={"张三",18,"男","21210108"};//学生1
struct Stu s2={"李四",19,"女","21211009"};//学生2
printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);
printf("%s %d %s %s\n", s2.name, s2.age, s2.sex, s2.id);
return 0;
}
方法2:使用函数打印
#include <stdio.h>
//结构体
//类型
struct Stu
{
char name[20];//名字是字符串
int age;//年龄是整数
char sex[5];//性别是字符串
char id[20];//学号是字符串
};
void Print(struct Stu* ps)
{
printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
}
int main()
{
//结构体变量
struct Stu s1={"张三",18,"男","21210108"};//学生1
struct Stu s2={"李四",19,"女","21211009"};//学生2
printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);
Print(&s2);
return 0;
}
其中简洁写法,可进行替换的部分
void Print(struct Stu* ps)
{
//printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);
}
总的结构代码:
#include <stdio.h>
//结构体
//类型
struct Stu
{
char name[20];//名字是字符串
int age;//年龄是整数
char sex[5];//性别是字符串
char id[20];//学号是字符串
};
void Print(struct Stu* ps)
{
//printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);
//->
//结构体指针->结构体成员
}
int main()
{
//结构体变量
struct Stu s1={"张三",18,"男","21210108"};//学生1
struct Stu s2={"李四",19,"女","21211009"};//学生2
//输入结构体数据
scanf("%s %d %s %s", s1.name, &(s1.age), s1.sex, s1.id);
//直接打印
printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);
//. 结构成员访问操作符
//结构体变量.结构体成员
//使用函数打印
Print(&s2);
return 0;
}