首页 > 其他分享 >十八、初识指针(1)

十八、初识指针(1)

时间:2024-12-14 21:33:19浏览次数:6  
标签:初始化 指向 int 十八 访问 初识 byte 指针

指针(变量)就是用来存放地址的(变量)

存放在指针中的值都被当作地址处理

一、指针和指针类型

指针类型决定了指针进行解引用时,能够访问空间的大小。

例:int* p        //*p访问4个byte

char* p        //*p访问1个byte

double* p        //*p访问8个byte

二、指针+整数

指针类型决定,指针走一步,走多远。(步长)

例:int* p        //p+1,走4个byte

char* p        //p+1,走1个byte

double* p        //p+1,走8个byte

#define _CRT_SECURE_NO_WARNINGS 1
//指针加整数
#include <stdio.h>
int main ()
{
	int a = 0x11223344;
	int* pa = &a;
	char* pc = &a;

	printf("%p\n", pa);
	printf("%p\n", pa + 1);

	printf("%p\n", pc);
	printf("%p\n", pc + 1);

	return 0;
}

三、野指针

野指针:指针指向的位置是不可知的

1.指针未被初始化

2.指针越界访问

3.指针指向的空间释放

1.指针未被初始化

#define _CRT_SECURE_NO_WARNINGS 1
//指针未初始化
#include <stdio.h>
int main ()
{
	int a = 0;//局部变量不初始化,默认是随机值。
	int* p;//局部的指针变量不初始化,就被初始化为随机值
	*p = 20;//地址随机
	return 0;
}

2.指针越界访问

#define _CRT_SECURE_NO_WARNINGS 1
//指针越界
#include <stdio.h>
int main ()
{
	int a [10] = {0};
	int i = 0;
	int* p = a;
	for (i = 0; i <= 12; i++)
	{
		*p++ = i;
	}
	return 0;
}

3.指针指向的空间释放

#define _CRT_SECURE_NO_WARNINGS 1
//指针指向的空间释放
#include <stdio.h>
int* test ()
{
	int a = 10;//局部变量,函数结束,变量就被释放了。
	//虽然我的地址保存了,但指针指向的位置已经不可知了,可能电脑已经分配给别变量了。
	return &a;
}
int main ()
{
	int* p = test();
	*p = 20;
	return 0;
}

4.如何规避野指针

(1)指针初始化

(2)小心指针越界

(3)指针指向空间释放后,立即置NULL

(4)指针使用之前先检查有效性(指针为空,不能访问。)

标签:初始化,指向,int,十八,访问,初识,byte,指针
From: https://blog.csdn.net/m0_56351488/article/details/144408365

相关文章

  • 五、类、结构体、指针、引用
    类可以将变量、数组和函数完美的打包在一起。1.类与结构体类的定义:#include<iostream>usingnamespacestd;classPerson{ private: doublescore; public: stringname; intage; voidsay() { cout<<"人会说话"; } voidset_score(doublecj)......
  • 代码随想录训练营第十八天| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.
     530.二叉搜索树的最小绝对差 题目链接/文章讲解:代码随想录视频讲解:二叉搜索树中,需要掌握如何双指针遍历!|LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili 注意是二叉搜索树,二叉搜索树可是有序的。给你一个二叉搜索树的根节点 root ,返回 树中任意两......
  • C语言(野指针及内存操作)
    野指针、空指针、空悬指针野指针定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)的指针,被称作野指针。野指针是危险的。危害:①引用野指针,相当于访问了非法的内存,常常会导致段错误(segmentationfault),也有可能编译运行不报错。②引......
  • golang: 指针和地址
    一,指针和地址的操作1,代码:要掌握以下三个用法:  *指针变量名 得到指针所指向的变量  *类型   表示这是一个此类型的指针  &变量   返回一个存放变量地址的指针packagemainimport("fmt""reflect")funcisPointer(vinterface{})......
  • golang: struct与指针
    一,可以通过指针访问struct的变量1,代码:packagemainimport("fmt""reflect")//判断是否指针funcisPointer(vinterface{})bool{returnreflect.ValueOf(v).Kind()==reflect.Ptr}//定义一个结构体typePersonstruct{NamestringAge......
  • C# 探险之旅:第十八节 - 元组(Tuple):神奇的背包与丢弃的艺术,还有变身大法!
    嘿,探险家们!欢迎再次踏上C#的奇妙旅程。今天,我们要聊的是一个非常实用又有点懒散的旅行伴侣——元组(Tuple)。想象一下,你正准备来一场说走就走的旅行,但是不想带太多行李,只想简单打包几件必需品。元组呢,就像是你的那个轻便背包,能让你轻松打包多件物品,而且不用担心超重!什么是元组?......
  • C++_快慢指针在业务开发中的应用-数据结构与算法
    报错的解决vector不是模板问题,第一是由于没有添加#include<vector>。第二是需要添加命名空间。命名空间添加有两种,第一是直接在vector前面加上std::,第二是开头加入usingnamespacestd;加入vector后,std命名空间没有vector的问题--C++版本问题其他快慢下标......
  • 【SAP MM】初识SAP-MM模块
    系列文章目录文章目录系列文章目录@[TOC](文章目录)前言一、物料管理简介二、MM的主要功能三、组织结构四、主数据五、采购文件类型总结前言MM核心功能:采购管理和库存管理一、物料管理简介物料是一个极广的含义,在SAP中,将重点关注用来直接或间接为企业增值的物品......
  • 我爱学算法之—— 感受双指针带来的快感(下)
    前言本篇文章继续来学习双指针算法;继续加油!!!一、三数之和15.三数之和-力扣(LeetCode)题目解析题目要求我们在一个给定的数组中,找到和等于0的三元组;但是呢有一些要求首先,这三元组中的元素是给定数组中的不同元素其次,找到的三元组不能够重复算法分析暴力枚举+set......
  • 江科大STM32学习:01 C语言(2)指针
    1.指针简介指针Pointer是C语言的一个重要知识点,使用灵活,功能强大指针和底层硬件联系紧密(寄存器),使用指针可操作数据的地址,实现数据的间接访问2.计算机存储机制每个区域都是一个字节,线性分配下去,每个字节对应一个地址。注:一个字节是8bitinta=0x12345678;//十六进制,八......