一、指针
1.内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。
//内存是计算机上的一种存储空间
//8G/16G
//程序运行的时候会载入内存
//程序如果有数据需要存储也会申请空间
///2进制:0~1
///8进制:0~7
///10进制:0~9
///16进制:0~9 a(10) b(11) c d e f
///一个字符占4个字节,他打印的是第一个字节
#include<stdio.h>
int main()
{
int a = 1;//向内存申请4个字节
int* pa = &a;//此时的pa是指针变量,pa的值为a处的地址
*pa = 20;//解引用操作 - 作用就是通过pa中的地址,找到a, *pa就是a//此时将20赋给pa地址处
//a = 20;
printf("%d\n", a);
printf("%p\n", &a);//&a为地址
printf("%p\n", pa);//指针变量
return 0;
}
//&取地址操作符
//&a取的是所占内存的4个字节中第一个字节的地址
//int a=11=0xb(16位)=013(8位)
//pa是一个变量,这个变量是用来存放地址的
//而地址又称为指针
//所以C语言把pa叫指针变量(指针变量是存放指针的变量)
2.指针变量的大小
#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
1.
2.
///32位机器上,是32个bit位
///32位的机器上,指针变量存放的是32bit的地址
///32位的机器,指针的变量是4字节
//x86是32位
//x64是64位
二、结构体
C语言的内置结构体:char short int long double float等
但是人(姓名、性别、身高)、书(书名、作者、出版社)这种复杂对象也需要有结构体
自定义的类型:
结构体
枚举
联合体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。 比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。 这里只能使用结构体来描述了。
C 语言中 void* 详解及应用 | 菜鸟教程 (runoob.com)
struct Star
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id; //学号
};//注意以分号作为结束
void Print(struct Star * ps)//说明其是指针变量,void无返回类型
{
printf("%s %d %s %d", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
//printf("%s %d %s %d", ps->name,ps->age,ps->sex,ps->id);
//上下语句是一致的
}
int main()
{
//结构体的初始化
struct Star s1 = { "lay",30,"男",1007 };
struct Star s2 = { "金玟庭",20,"女",521 };
printf("%s\n", s1.name);
Print(&s1);
return 0;
}
printf("%s %d %s %d", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
printf("%s %d %s %d", ps->name,ps->age,ps->sex,ps->id);
//上下语句是一致的