C语言学习--指针、结构体

目录

一、指针

二、结构体--struct、strcpy


一、指针

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值