学指针的基础知识(c语言)

1.内存四区

  • 代码区:代码。
  • 全局区:全局的常量。
  • 栈区:系统自动开辟,自动释放。for(int i=0;i<n;i++)其中的i属于栈区,使用完自动释放,内存空间较小。
  • 堆区:动态开辟,手动开辟,手动释放,在学数据结构的时候,接触的malloc就是手动开辟内存空间,内存空间较大。

2.地址

	把内存以1个字节为单位。地址的1000是随便写的,但1001,1002是依次递增的。

在这里插入图片描述
说到地址,不得不说c语言的取地址运算符&,通过&就可以知道变量在内存中的首地址。

#include <stdio.h>
int main(){
	int a;
	printf("%d",&a);
}

运行结果:
在这里插入图片描述
运行结果的解释:变量a在内存中的地址为6487580。

3.首地址

    一段内存空间中第一个存储单元的地址。
  • 如果定义了一个char a[5],其中a[0]的地址就是首地址;
  • 如果定义了一个int a[5],其中int占据4个字节的大小,首地址就是a[0]在内存空间里的第一个存储空间的地址,假如a[0]的存储空间为1000,1001,1002,1003,则首地址为1000。
  • 数组同理

4.指针指针变量

指针:地址。
指针变量:用来存放地址的变量。
(1)指针变量的引用
数据类型 *变量;

//定义一个指针变量p,存的是地址!
//int 指明指针指向的数据类型
//* 指明p这个变量是一个指针变量
int *p;

(2)指针变量的赋值

int a;
int *p;  //* 只是表明指针p是一个指针变量
p = &a;  //指针里存放的是a的地址

(3)指针变量的引用

//1.使用变量名
printf("a=%d",a);
//2.指针访问
//*为取值运算符,返回某一地址中的值。
printf("a=%d",*p);

(4)实例
在这里插入图片描述

现在假设有一个 char 类型的变量 c,它存储了字符 ‘K’(ASCII码为十进制数 75),并占用了地址为 0X11A 的内存(地址通常用十六进制表示)。另外有一个指针变量 p,它的值为 0X11A,正好等于变量 c 的地址,这种情况我们就称 p 指向了 c,或者说 p 是指向变量 c 的指针。
代码表示为:

char c = 'k';
char *p;
p = &c;

(5)好习惯

//int *p;  p里面保存的地址不确定,p的指向是不明确的。可能为重要数据。
int *p=NULL;

5.指针变量的运算

+,-,++,-- 指针偏移,去访问地址旁边的一些内存。
指针变量的偏移,以指针所指向的类型空间为单位进行偏移。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值