指针(一)

  • 1.指针
  • 2.野指针
  • 3.空指针
  • 4.多级指针
  • 5.指针和数组
  • 6.万能指针和指针步长
  • 7.const 修饰

1.指针

指针就是地址。
先说内存分配地址:以一个字节为单位分配地址,每一个地址都有一个标号,也可以说叫指针。
地址也需要存储,32为编译器用32位存储地址,64位编译器用64位存储地址。
房间有大有小,所以c语言也给变量划分类型,有int 4字节,char 1字节。这里要说的是,int类型它包含4个地址标号,而不是一个,取地址&取得是首地址,因为int类型4个字节固定,所以也能够知道它的尾地址。
在这里插入图片描述

指针的定义:
数据类型 * 指针变量名
“*” 号是告诉编译器这个变量是指针变量,数据类型是说明,该指针只能指向规定类型数据,不能指向其他其他类型的数据,否则会出错。

程序说明:
在这里插入图片描述
在这里插入图片描述
2.野指针:

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
在这里插入图片描述
3.空指针
空指针,给指针初始化为NULL,NULL可以看成数字0
在这里插入图片描述
4.多级指针

指针是一个特殊的变量,它存放的不是一般的数据,而是程序中某个数据或对象的内存地址。
如果定义一种变量,它存放的不是普通变量而是指针变量的地址,那这种变量就是指针的指针。存放普通地址的变量叫一级指针,而存放一级变量的内存地址叫做二级指针。还有三级的,很多级的。
在这里插入图片描述
在这里插入图片描述
5.指针和数组

例如:char (*p) [10];
它定义了一个数组指针,指向有10个元素的一维字符数组。
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
int main()
{
	int a[10] = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10};
	int *p = a;
	int n = sizeof(a)/sizeof(*a);
	int i;
	for(i = 0;i < 10; i++)
	{
		printf("%d\n",*p);
		p++;
	}
	return 0;
}

在这里插入图片描述

6.万能指针和指针步长

void *;
虽然不可以定义void类型的普通变量,因为它不知道应该给这个变量多大的内存空间。但是可以给指针定义void,因为指针的大小是固定的:32位的编辑器就是4个字节的指针,64位就是8个字节的指针。

void *指针也叫万能指针,可以指向任何类型的变量,使用指针时最好转换成它本身的指针类型。

指针步长:p+1就是移动一个数据类型的字节
在这里插入图片描述
7.const 修饰:
const 修饰指针,代表指针所指向的内存是只读的
格式:

const int *p2 = &a;

修饰指针变量,代表指针指向的地址为只读:

int * const p4 = &a;

还有同时修饰:

const int * const p5 = &a;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值