目录
一、指针内容讲解
在学习指针前,之所以要认识和理解内存,是因为指针是用来访问(管理)内存的。
1、内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是
1个字节
。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该
内存单元的地址
。
内存 | |
一个字节 | 0XFFFFFFFF |
一个字节 | 0XFFFFFFFE |
一个字节 | .... |
一个字节 | 0X00000002 |
一个字节 | 0X00000001 |
一个字节 | 0X00000000 |
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
也可以想象成生活中一栋楼的房间编号,有了这样的编号,就可以快速的找到对于的房间。
拓展
bit | 存放1个二进制位 |
Byte | 1Byte = 8bit |
KB | 1KB = 1024Byte |
MB | 1MB = 1024KB |
GB | 1GB = 1024MB |
TB | 1TB = 1024GB |
PB | 1PB = 1024TB |
#include <stdio.h>
int main()
{
int a = 10;
&a;//取出a的地址
printf("%p\n", &a); //打印地址,%p是以地址的形式打印
return 0;
}
注:此时在这个代码中这里a占4个字节,虽然每个字节都有地址,但是取出的是第一个字节的地址(较小的地址)。
2、指针
在C语言中,也把地址叫做指针。(编号 == 地址 == 指针
举个例子
#include <stdio.h>
int main()
{
int num = 10;
int *p = #
return 0;
}
其中p是个变量,用来存放a的地址,叫:指针变量,意思是存放指针的变量。
int *这个整体说明p的类型。
* 是说明p是指针变量。
int 说明p指向的是int类型的变量。
注:在这个代码中*p 就是 num。
所以当地址需要存储时,这时候就需要定义指针变量。
#include <stdio.h>
int main()
{
int num = 10;
int *p = #
*p = 20;
printf("%d\n",num);
return 0;
}
这个代码的打印结果就是20,可以简单说明一下指针的作用。
关系:指针变量 - 变量 - 存放地址的变量
3、指针变量的大小
指针变量是用来存放地址的,故指针变量的大小取决于地址的大小。
32位机器上:地址是32个bit位(即32个二进制位),这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是4个字节。
64位机器上:地址是64个bit位(即64个二进制位),这个地址要存储的话要8个字节,所以在64位机器上,指针变量的大小是8个字节。
#include <stdio.h>
int main()
{
int a = 10;
int * p = &a;
printf("%zd\n", sizeof(p));
printf("%zd\n", sizeof(char *));
printf("%zd\n", sizeof(short *));
printf("%zd\n", sizeof(int *));
printf("%zd\n", sizeof(double *)); //打印是如果是%d就会有警告,可以改成%zd
return 0;
}
二、结构体(接上篇文章)
关于结构体中的 . 和->
在结构体中表达格式:结构体变量 . 成员 结构指针->成员
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15]; //学号
};
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);
今天的分享到这边结束了,制作不易,求个三连。