目录
一、指针
20231113
内存
地址-->空间(房间)
房间编号地址
①编号怎么编如何编址②多大
32位64位:32位指的是32根地址线(电线)/数据线--》通电以后会有正电和负电的
可能性有:
00000000000000000000000000000000==》0
00000000000000000000000000000001==》1
00000000000000000000000000000010==》2
……
11111111111111111111111111111111
共有2^32个
则可以产生2^32个地址编号
如果以一个空间一个bit,那么最终得到内存0.5gb很不合适【×】
一个空间一个字节(byte)最终是4gb就比较合适【√】
- HEX,Hexadecimal ,十六进制。
- DEC,Decimal ,十进制。
- OCT,Octal ,八进制。
- BIN,Binary ,二进制
int main()
{
int a=10;//申请四个字节
int *p=&a;//&取地址符号,【int*是p的类型】
printf("%d\n",p); //十进制
printf("%p\n",p); //十六进制
//有一种变量是用来存放地址的---》指针变量
printf("%p\n",&a); //十六进制000000000062FE1C(会变)
printf("a1=%d\n",a); //10
*p=20;//*是一种解引用操作符
//将a的值改变为20
printf("a2=%d\n",a); //20
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
int a=10;//申请四个字节
int* p=&a;//&取地址符号,【int*是p的类型】
printf("%d\n",p); //十进制
printf("%p\n",p); //十六进制
//有一种变量是用来存放地址的---》指针变量
printf("%p\n",&a); //十六进制000000000062FE1C(会变)
printf("a1=%d\n",a); //10
*p=20;//*是一种解引用操作符
//将a的值改变为20
printf("a2=%d\n",a); //20
return 0;
}
32位机子上面,32bit=4byte,即存储地址只需要4个字节(64位平台则是八个字节)
指针变量是多少个字节和其指向的变量的类型是没有关系的,而是看所在平台是32位还是64位
(eg:上面图中变量a是int类型是4个字节,但是是在64位平台上面运行,则指针变量是8个字节)
#include <stdio.h>
#include <string.h>
int main()
{
char ch='a';
char* p=&ch;
printf("%c\n",ch);
*p='m';
printf("%c\n",ch);
printf("%d\n",sizeof(p));
return 0;
}
电脑
8G--内存,划分成多个小的内存单元
500G--硬盘
二、结构体--struct、strcpy
人、书……是复杂对象
复杂对象用结构体来描述----结构体是我们自身创造的一种类型
#include <stdio.h>
#include <string.h>
//创建一个结构体类型
struct Book
{
char name[20];
short price;
};//;不能省,表示结构体的结束
int main()
{
//利用结构体类型创建一个该类型的结构体变量
struct Book b1={"C语言程序设计",55 };
printf("书名:%s\n原价:%d\n",b1.name,b1.price) ;
//%c打印单字符%s打印字符串
//error==>b1.name={"cyuyangoajichengxu"};//但name是数组名 ,本质上是一个地址
strcpy(b1.name,"cyuyuanchengxu"); //strcpy--string copy--字符串拷贝
//strcpy是库函数 --头文件 #include <string.h>
b1.price=45;//price是变量可以这样改
printf("书名:%s\n现价:%d\n",b1.name,b1.price) ;
struct Book* pb=&b1;//指针变量pb的类型是struct Book*
printf("书名:%s\n现价:%d\n",(*pb).name,(*pb).price) ;//.的优先级很高,需要考虑优先级,所以加()
printf("书名:%s\n现价:%d\n",pb->name,pb->price) ;
//. 结构体变量. 成员
//->结构体指针->成员
return 0;
}
#include <stdio.h>
#include <string.h>
//创建一个结构体类型
struct Book
{
char name[20];
short price;
};//;不能省,表示结构体的结束
int main()
{
//利用结构体类型创建一个该类型的结构体变量
struct Book b1={"C语言程序设计",55 };
printf("书名:%s\n原价:%d\n",b1.name,b1.price) ;
//%c打印单字符%s打印字符串
//error==>b1.name={"cyuyangoajichengxu"};//但name是数组名 ,本质上是一个地址
strcpy(b1.name,"cyuyuanchengxu"); //strcpy--string copy--字符串拷贝
//strcpy是库函数 --头文件 #include <string.h>
b1.price=45;//price是变量可以这样改
printf("书名:%s\n现价:%d\n",b1.name,b1.price) ;
struct Book* pb=&b1;//指针变量pb的类型是struct Book*
printf("书名:%s\n现价:%d\n",(*pb).name,(*pb).price) ;//.的优先级很高,需要考虑优先级,所以加()
printf("书名:%s\n现价:%d\n",pb->name,pb->price) ;
//. 结构体变量. 成员
//->结构体指针->成员
return 0;
}