栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

31天C语言——8,指针基础

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

31天C语言——8,指针基础

文章目录
  • 1,入门案例
  • 2,图解过程
  • 3,指针的类型
      • 访问范围
      • 偏移
  • 4,用偏移操作数组
  • 5,野指针

1,入门案例
#include 

int main() {
	int a = 3;
	printf("%dn", a);
	int *b = &a;
	*b = 7;
	printf("%dn", a);
	return 0;
}

效果:


a从3变成了7。

2,图解过程

int a=3
变量a,值是3。

a
访问变量a
&a
访问a所指向的地址。

int* b=&a
获取a的地址,存放地址到b中。

*b
找到b中的值所指向的地址。图中3所在的方框。


*b=7
找到b中的值所指向的地址,修改数据为7。

3,指针的类型

指针有很多类型,比如:
int*
char*
double*

访问范围

不同的类型,解引用之后,能访问的字节数不同。

char*:一个字节。
int*:四个字节。
double*:八个字节。

比如:
数据是int类型,
指针是char*类型,
改动的时候只会改变一个字节。

#include 

int main() {
	int a = 0x11223344;
	printf("%xn", a);
	char *b = &a;
	*b = 0;
	printf("%xn", a);
	return 0;
}

效果:只有最低的一个字节被修改了。

int* 会访问四个字节大小的范围。
char* 只有一个字节。

偏移

int* b=&a
char* c=&a

指针类型加一。
表示该地址后面的一个地址。

b+1代表a指向的数据向后移动4字节。
c+1代表a指向的数据向后移动1字节。

#include 

int main() {
	int a = 3;
	int *b = &a;
	char *c = &a;
	printf("%pn", b);
	printf("%pn", c);
	printf("%pn", b + 1);
	printf("%pn", c + 1);
	return 0;
}

效果:
b+1:地址加4
c+1:地址加1

4,用偏移操作数组

数组名是对首个元素的指针,
数组名加一就是第二个元素。

举例:让第三个元素的值加123。

#include 

int main() {
	int arr[] = {1, 2, 3, 4, 5, 6, 7};
	*(arr + 2) += 123;
	printf("%dn", arr[2]);
	return 0;
}

效果:3+123=126

5,野指针

野指针:指针,但是指向奇怪的地方。

野指针会导致大部分的Bug。

常见的几种野指针:

  1. 未初始化的指针。
  2. 数组越界之后的指针。
  3. 数据已经不在生命周期的指针。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号