C语言 指针与存储、结构体

1、指针

内存会划分为一个个内存单元,每个内存单元都有一个编号(1个内存单元是一个字节byte)

32位电脑是32根地址线,如下存储空间

000000000
000000011
000000102
...........................
111111112^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;
}

//结构体变量 -> 成员名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值