C语言指针初阶

从零到一:ESP32-P4 PPA加速的配置陷阱与避坑指南 本文详细解析ESP32-P4结合LVGL的PPA硬件加速配置中的常见陷阱,包括内存对齐、缓冲区设置和同步机制等关键问题。提供实用的避坑指南和优化方案,帮助开发者高效启用esp32p4的PPA加速功能,显著提升图形渲染性能。 阅读详情


本文简单讲解初阶指针,后面会再出一期详细讲解进阶指针。

一、指针简介

指针是内存中一个最小单元的编号,也就是地址。我们平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。
指针变量:
我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个变量就是指针变量。
指针的大小:
在32位平台是4个字节,在64位平台是8个字节。

二、指针和指针类型

指针有类型,例如

char* p1 = NULL;
int* p2 = NULL;
float* p3 = NULL;

在第一行代码中,char* 是指针的类型,p1是指针变量,表示char* 类型的指针是为了存放 char 类型变量的地址。

1.指针±整数

    int a = 10;
    int* p = &a;
    printf("%p\n",p);
    printf("%p\n",p + 1);

在这里插入图片描述
我们可以看到,int* 类型的指针变量 + 1是跳过了4个字节。

char b = 0;
char* p1 = &b;
printf("%p\n",p);
printf("%p\n",p + 1);

在这里插入图片描述
我们可以看到,char* 类型的指针变量 + 1 是跳过了 1 个字节。

所以,指针的类型决定了指针向前或者向后走一步有多大(距离)。

2.指针的解引用

int n = 0x11223344;
 char *pc = (char *)&n;
 int *pi = &n;
 *pc = 0;   
 *pi = 0; 

不同类型的指针解引用时能访问的大小也不同。
char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

三、野指针

1.野指针成因

概念:
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。

int *p;
*p = 20;

例如上述代码,指针在创建时并未进行初始化,默认为随机值。

 int arr[10] = {0};
    int *p = arr;
    int i = 0;
    for(i=0; i<=11; i++)
   {
        *(p++) = i;
   }

例如上述代码,指针指向的范围超出了数组arr的范围,进行了越界访问。

2.如何避免野指针

  1. 指针初始化
  2. 小心指针越界
  3. 指针指向空间释放即使置NULL
  4. 避免返回局部变量的地址
  5. 指针使用之前检查有效性

四、指针运算

1.指针±整数

int arr[5] = {1,2,3,4,5};
int* p = arr;
for (p = arr;p < &arr[5];)
{
	*p++ = 0;
}

标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。

2.指针-指针

int my_strlen(char *s)
{
       char *p = s;
       while(*p != '\0' )
              p++;
       return p-s;
}

五、指针和数组

#include <stdio.h>
int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,0};
    int *p = arr; //指针存放数组首元素的地址
    int sz = sizeof(arr)/sizeof(arr[0]);
    int i = 0;
    for(i=0; i<sz; i++)
   {
        printf("&arr[%d] = %p   <====> p+%d = %p\n", i, &arr[i], i, p+i);
   }
    return 0;
}

我们可以用指针来访问一下数组
在这里插入图片描述

我们可以利用指针打印一下数组的结果

int main()
{
 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 int *p = arr; //指针存放数组首元素的地址
 int sz = sizeof(arr) / sizeof(arr[0]);
 int i = 0;
 for (i = 0; i<sz; i++)
 {
 printf("%d ", *(p + i));
 }
 

在这里插入图片描述

六、二级指针

指针变量也是变量,它也有地址,也需要存储在内存中,这就需要运用二级指针。

int a = 10;
int* pa = &a;
int** ppa = &pa;      //int**   二级指针类型

这时候对ppa解引用,得到以下代码

int b = 20;
*ppa = &b;//等价于 pa = &b;
**ppa = 30;
//等价于*pa = 30;
//等价于a = 30;

七、指针数组

指针数组是存放指针的数组。本质上是数组。
我们常见的有整型数组、字符数组等。

int arr1[4];
char arr2[2];
int* arr3[6];    //指针数组

arr3是一个数组,有五个元素,每个元素都是一个地址,都是一个指针。

注:本次学习就暂时结束啦,文章中有错误、不足之处欢迎大佬指正,让我们共同学习,共同进步,一切成功的秘诀,都在于我们不懈的追求,加油!

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试) 在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。 阅读详情

相关推荐

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

C语言——指针从初阶到进阶

本文讨论了关于指针的相关问题,欢迎大家阅读指针

2501_90507065的博客 6155

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 418

C语言指针(初阶)

嘻嘻,家人们,今天咱们剖析一下指针,好啦,废话不多讲,开干!

ABWSO的博客 2994

Python使用netmiko配置华为交换机

1.netmiko就是专门为网络设备做的模块,非常强大。1.更适合网络设备的自动化运维模块。2、批量配置变更、备份。1.安装netmiko。2. 创建SSH连接。一、netmiko介绍。

博然的宝藏库 2797

河洛理数【陈抟】每月月卦推演每日运卦

Step2:每卦中的日爻遇到二十四节气中的当日为节(月初)或气(月中)的时候,所代表的日期需要变更。正常来说,屯卦分别代表初一到初六,但是由于当月初二时立秋节,所以初爻就不能作为初一、而是要作为立秋节开始时(文中还精算到了立秋是从初二的午时开始),如下。说的代表月运的基础卦上进行当月日卦的推演方式。老样子,我们还是按照书中举得例子卦在这边进行一步步的推演,最后做总结。Step1:从月卦爻下一爻开始,自下而上,进行五个爻的爻变,新推演的每个卦代表六天,如下。假设当月月卦是即济卦,月爻在二爻,如图所示(

Daniel专栏 764

C语言初阶指针详解【初阶--4--】

这篇笔记介绍了C语言中指针的基本概念和操作,包括指针定义、类型、野指针、指针运算、数组与指针的关系、二级指针和指针数组。强调了指针是内存地址的表示,指针类型决定了解引用时访问的字节数和步长。讨论了野指针的风险和避免方法,以及指针在数组操作中的应用。最后,介绍了二级指针和指针数组的使用,包括如何通过指针数组模拟二维数组。

隼玉的博客 1455

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败)

安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如

🏆 前端领域优质创作者 8063

C语言之初阶指针

本篇将深入探讨C语言中至关重要的知识点——指针。鉴于指针内容的丰富性,我将其分为初阶和进阶两部分。初阶部分适合刚刚接触C语言的同学,许多人在学习指针时感到困惑,希望通过我的讲解,能让你们真正理解并掌握指针。现在,让我们立即开始这段指针之旅。在计算机科学中,指针(Pointer)是编程语言中的一个对象,它存储的是另一个变量的内存地址。通过这个地址,指针可以直接指向存储器中另一个地方的值。由于通过地址可以找到所需的变量单元,因此地址形象地被称为“指针”。换句话说,指针是通过它所存储的地址来找到对应的内存单元。

在不断学习中 1352

Python爬虫教程:爬取法院司法拍卖数据全流程实战(附反爬+数据分析方案)

Python爬虫爬取法院司法拍卖数据的核心是模拟真人行为规避反爬+精准解析页面数据+合理处理数据。新手不用一开始就追求高级的反爬技巧和复杂的数据分析,先把基础的分页爬取和数据保存功能跑通,再逐步优化。我做的这个工具现在每周帮朋友爬取全国10个城市的法拍房数据,自动生成分析报告,他说这让他的投资决策效率提升了一倍。如果你们在开发过程中遇到问题,比如反爬失败、数据解析错误,都可以在评论区留言,我会尽力解答。后续我还会出一期爬取京东司法拍卖数据的教程,帮助大家获取更多的法拍数据来源。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2179

2026.5.3:Ubuntu26.04下uv所需的环境变量pyproject.toml

本文档提供了Python开发环境的配置指南。主要包括: 设置环境变量(HF_ENDPOINT、UV_PYTHON_INSTALL_MIRROR等) 创建pyproject.toml配置文件,定义项目元数据(名称、版本等) 指定依赖项(torch系列库)及其安装源(PyTorch官方CUDA 12.8镜像) 配置Python版本要求(>=3.13,<3.14) 设置平台限制(Linux/Windows) 该配置适用于需要PyTorch CUDA 12.8支持的项目开发环境搭建。

拥抱具身智能,昇腾Ascend C 590

【c语言】初阶指针

地址的产生:对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是1或者0;允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。&数组名,此时数组名表示整个数组,取出的是数组的地址,数组的地址和数组首元素的地址值相同,但是类型和意义不同。//++的优先级高于间接访问操作符,但p++的结果是p,解引用得到原指针指向的变量。(正确,p是指针变量)arr++;

m0_74304693的博客 1377

Android Shadow插件化框架分析与集成(一)

到此为止,本篇文章先介绍到这里,本篇文章主要介绍了:从源码的角度去集成shadow框架,从下载源码开始,到集成到自己的项目中,其中插件项目我是新建的demo应用,宿主应用是之前搭的一个MVP框架。文章中一步一步详细的介绍了宿主该如何集成,并提供了源码;介绍了插件该如何集成,同时也提供了源码。文章中还介绍了gradle的版本与AGP版本使用不当造成的问题,以及shadow源码的gradle版本与APG版本的配置,及和宿主插件应用gradle版本与AGP版本的关系。

superzhang6666的博客 1235

初始C语言(7)——详细讲解有关初阶指针的内容

在上一章内,小编带领大家详细学习了有关表达式求值的相关内容,学习了隐式类型转换和显式类型转换的相关内容介绍了操作符的一些属性。而在这一章内,小编要带领大家进行学习初阶指针的一些内容,不要害怕,这一部分只是为了后面讲述进阶指针做一个铺垫,所以不要担心指针这一节很难,当你刚开始就害怕的话,你将永远地活在这个阴影之下,会永远学不会这一章的内容,希望大家能够有耐心地将这一章看完!内存是计算机中的重要部件,也称内存储器和主存储器它是程序和CPU进行沟通的桥梁。计算机中所有程序的运行都在内存中进行。

加油,考上985的研究生 3504

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C语言】指针初阶

本文主要介绍了指针的基本概念以及使用,适合初学者入门。

weixin_74200123的博客 863

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C语言——初阶指针理解

a的局部变量还给操作系统,内存地址还回去,但地址里的值不变,而*p拿到的是a的地址,所以可以输出10,但printf也需要使用内存空间,有可能会用到a还回去的地址空间,值就会被覆盖所以我们每次打印出来p的值是不一样的,因为每次分配给a的内存不一样,a返回的地址每次也不一样。

Dfuen的博客 1083

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【C语言初阶(八)】初阶指针详解

我们在介绍C语言时已经给大家介绍过指针的概念以及内存地址的概念.

iwanna1fd的博客 736

C语言——指针初阶(二)

本节主要对C语言——指针初阶(一)的一些内容进行补充,并主要讲解数组指针。

hjx1235的博客 1454

C语言初阶——指针

指针一、指针三连问1.1 什么是指针?1.2 为什么使用指针?1.3 指针怎么用?二、指针和指针的类型2.1 指针类型2.2 指针的解引用三、野指针四、指针运算五、指针和数组六、二级指针七、指针数组 一、指针三连问 1.1 什么是指针? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单

8233

(c语言)初阶指针

变量有不同的类型,例如int,char,short等等,指针也对应有不同类型,区别在于指针类型的长度都是相等的4个或者8个字节,指针类型的不同决定的是在解引用指针时访问的字节。指针的本质是地址,因此可以进行加减,但是只有指向同一块内存空间的指针加减才有意义,加减结果为两个指针间的元素个数,一般都是用指针相减,相加几乎不用,没有太大意义。在进行解引用修改时,int*每次修改四个字节的内容,而char*每次只修改一个字节的内容 ,在执行指针+-时也是同理,类型不同,一次处理的字节数也不同。

qq_74737616的博客 1022

[C语言初阶]指针初阶

本文系统介绍C语言中关于指针的初阶内容,包括指针的定义,指针类型,野指针是什么以及如何避免,指针运算,指针与数组,二级指针,指针数组七部分内容,学完可以看懂会写指针相关的代码

D_mhy的博客 753

C语言——初阶指针

标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。(*vp)++ ->(这个地方的++作用于*vp,指的是先找到vp指向的地址的数,再对数进行+):野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)2、平时口语中说的指针。不是所有的两个指针都能相减,指向两个相同空间的指针才能相减。指针的类型决定了指针+-1操作的时候,跳过几个字节。指针 - 指针得到的是两个指针之间元素个数的绝对值。

2401_87795122的博客 435

[C语言]指针初阶

C语言指针初阶

本科在读,致力于Linux/C++方向的学习,同时涉及数据结构与算法,操作系统,数据库mysql等等 965

6、C 语言指针初阶知识点总结

本文总结了C语言指针的核心知识点。首先介绍了指针基础概念,包括内存地址、基地址和取址符的用法。其次讲解了指针定义与本质,强调指针必须初始化以避免野指针危险。在特殊指针部分,重点区分了野指针和空指针的特性及使用注意事项。最后阐述了指针运算规则,包括指针大小、加减运算及其在数组遍历中的应用。文章特别强调指针安全使用规范,如避免越界访问、及时释放内存等注意事项,为初学者提供了完整的指针知识框架。

weizhigongzi的博客 734

c语言初阶 指针

核心概念关键点风险点/注意事项指针本质32位系统中指针是32位地址,固定占4字节,存储内存单元编号避免解引用未初始化的指针指针类型决定解引用时访问的字节数和加减运算的步长不同类型指针不能混用野指针未初始化、越界或指向已释放内存的指针使用前检查指针有效性,避免返回局部变量地址指针运算加减整数、指针相减(元素个数)、关系运算避免指针越界和无效地址运算指针与数组数组名隐式转换为首元素指针,可通过指针访问数组元素数组作为参数会退化为指针,丢失大小信息二级指针。

ztztz111的博客 1259

C语言:指针初阶(下)

• sizeof(数组名),sizeof中单独放数组名,数组名表示整个数组,计算的是整个数组的大小, 单位是字节。• &数组名,数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)这主要是由于调用函数是在修改形参,对实参没有影响,只有通过指针访问该空间才能修改。那么arr和&arr都表示首元素地址,他们的区别是什么呢?&arr是也表示整个数组的地址,+1操作跳过整个数组。数组名就是数组首元素(第一个元素)的地址。arr是首元素的地址,+1跳过一个元素。

bit_wjz的博客 899
上一篇: C语言操作符详解
下一篇: C语言结构体
Snakra
博客等级 码龄5年 240粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值