189 8069 5689

【C语言】初始指针(上)-创新互联

【C语言】初始指针(上)
  • 1·什么是指针
        • 指针理解的3个要点:
  • 2·指针和指针类型
        • 2.1 指针+-整型
        • 2.2 指针的解引用
  • 3·野指针
        • 3.1指针的成因
            • 1.指针未初始化
            • 2.指针越界访问
            • 3.指针指向的空间释放
        • 3.2如何规避野指针

专业成都网站建设公司,做排名好的好网站,排在同行前面,为您带来客户和效益!成都创新互联公司为您提供成都网站建设,五站合一网站设计制作,服务好的网站设计公司,网站制作、成都网站建设负责任的成都网站制作公司!1·什么是指针 指针理解的3个要点:

1.指针式内存中一个最小单元的编号,也就是地址
2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
3.指针的大小在32位平台是4个字节;在64位平台是8个字节
总结:指针就是地址,口语中说的指针通常指的是指针变量。

2·指针和指针类型

接下来我们说一下指针的类型
我们都知道,变量有不同的类型:整型,浮点型等。那指针有没有类型呢?
准确的说:有的。

2.1 指针±整型

我们都知道一个int类型占用4个字节,而一个char类型占用1一字节,指针的类型就决定了指针向前或向后的距离(也就是走一步的大小)。

在这里我们可以从内存中清晰的看到,地址变化的大小,这就是指针类型的意义之一。

2.2 指针的解引用

上边说了指针其实就是变量的地址,而指针的解引用操作就是找到指针所指的这个变量,对其进行重新赋值等操作。
在这里插入图片描述
在这个图中我们可以看到,int类型的指针可以正常的把值修改成我们想要的结果;而char类型却不行(在这里,因为char是一个字节,所以在内存中只能一个字节一个字节的修改我们变量,而我们的arr2数组却是int类型,四个字节位一组,所以其只能修改10个字节的内存,结果也就不是我们想要的了),这就是指针类型的另一个意义。
总结:
指针的类型决定了,对指针进行解引用操作时,有多大的权限(能操作几个字节)。

3·野指针

概念:野指针就是指针指向的位置是不可知的,随机的

3.1指针的成因 1.指针未初始化
int main()
{int a = 10;
	int* p;
	*p = &a;
	return 0;

}

大多数编程小白经常会这样写代码,其实这个代码是有问题的,其问题在于,一开始未进行初始化,所以指针所指向的内存就是未知的,后续进行的赋值操作,也就未知的内存中进行修改,这可能导致程序奔溃。所以,我们要尽可能避开这种写法。
这里推荐一种写法:

int main()
{int a = 10;
	int* p = NULL;
	//NULL - 相当于\0 
	*p = &a;
	return 0;

}
2.指针越界访问

在这里插入图片描述
在这里我们就能看见,指针解引用操作已超过数组的大小,在编译器中会报错的,并且我们也不知道后续的指针知道了那儿里。

3.指针指向的空间释放

这里放在后续的时候讲解,这里就简单提示一下。

3.2如何规避野指针
  1. 指针初始化
  2. 小心指针越界
  3. 指针只想空间释放,及时置NUL
  4. 避免返回局部变量的地址
  5. 指针使用之前检查有效性
int main()
{int* p = NULL;
	//....
	int a = 10;
	p = &a;
	if (p != NULL)//检查指针有效性
	{*p = 20;
	}
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:【C语言】初始指针(上)-创新互联
新闻来源:http://cdxtjz.com/article/iccpo.html

其他资讯