1、指针
内存会划分为一个个内存单元,每个内存单元都有一个编号(1个内存单元是一个字节byte)
32位电脑是32根地址线,如下存储空间
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2^32 |
一共有2^32地址序列 =2^32byte = 2^22KB = 4GB 所以32位电脑内存为4GB
在Vs中int 一个 a变量赋值为10;内存存储情况如下
初始时候
int a = 10;之后在内存开辟四个字节存储10
上图代码中,&表示取地址,输出的是a变量的地址(十六进制),p表示指针变量,用来存放指针或者地址的变量 。
#include <stdio.h>
int main()
{
char ch = 'w';
char *pc = &ch;//char表示数据类型
return 0;
}
// *p:解引用操作符,意思是通过P中存放的地址找到p所指向的对象,*p就是p指向的对象(ch)
// *pc = 'w';相当于 ch = 'w';
//& 找到地址
//* 找到变量
指针变量的大小都是一样的,不管是什么类型,指针变量是用来存放地址,指针变量的大小取决于一个地址存放的时候需要多大的空间。32位机器上的地址:32bit位 - 4byte,所以只剩的大小是4个字节。64位机器上的地址:64bit - 8byte,所以指针大小是8个字节。
#include <stdio.h>
int main()
{
int* p1, p2,p3;//p1为指针变量,p2,p3为整型
int *p1,*p2,*p3;//p1,p2,p3为指针
ruturn 0;
}
2、结构体 自定义类型(把单一类型组合在一起)
定义一个学生类
#include <stdio.h>
struct Student
{
//结构体成员
char m_name[20] ;
int m_age;
char m_sex[10];
char m_tele[12];
};
//不占内存
void print(struct Student *ps)
{
printf("%s %d %s %s\n", s->m_name, s->m_age, s->m_sex, s->m_tele);//一一对应
}
int main()
{
struct Student s = {"张三",20,"男","130****1403"};//结构体实例化
printf("%s %d %s %s\n", s.m_name, s.m_age, s.m_sex, s.m_tele);//一一对应
print(&s);
return 0;
}
//结构体变量 -> 成员名