首页 > 其他分享 >指针(2)指针基本了解及其应用

指针(2)指针基本了解及其应用

时间:2023-12-05 22:56:06浏览次数:29  
标签:变量 示例 int 及其 地址 函数 应用 指针

<1>指针

(1)指针基本概念

1)引入:提出问题:

  • 如果能够将取得的变量的地址传递给一个函数,能否通过这个地址在那个函数内访问这个变量

2)回顾scanf函数功能

  • 格式:scanf("%d",&i)
  • 深入探讨:scanf()的原型应该是怎样的?我们需要一个参数能保存别的变量的地址,如何表达能够保存地址的变量?

3)提出指针

  • 指针定义:保存地址的变量
举例:

int i;
intp=&i;
1.//p表示指针;
表示p是一个指针,它指向int;现在我们将i的地址交给p
通俗来讲:我们有一个变量i和一个变量p,p是指针,p获得的值是i的地址,也就是p指向i
2.//细节:同时我们应明确p是一个整体,p是一个int,于是p是一个指针

(2)指针变量

1)概念明晰

  • 变量的值是内存的地址
  • 普通变量存放的是实际的值
  • 指针变量的值是具有实际值的变量的地址

//也就是说指针变量里存储的是地址,指向其他实际的变量;而普通的变量中存放的就是实际的值

2)作为参数的指针

1.相关概念及意义

  • 示例:void f(int*p);
  • 实际意义:在被调用时得到了某个变量的地址;

重点:当我们在调用f函数时,我们就要交给它一个地址而不能是变量本身——示例:int i=0;f(&i);

同时我们以一段代码为例:

#include<stdio.h>

void f(int p);//对函数进行原型声明
int main(){
int i=6;
printf("&i=%p\n",&i);//将i的地址取出来交给f函数
f(&i);
return 0;
}
void f(int
p)
{
printf("p=%p\n",p);
}

从整体进行理解:在main函数中有一个变量i,值为6,地址为70;我们把这个地址取出来交给另外一个f函数中的变量p,p的值是70;于是我们可以说p是一个指针指向i

3)访问地址上的变量*

  • 1.相关概念:

*是一个单目运算符,用来访问指针的值所表示的地址上的变量;

<2>指针的使用

1>相关应用情景

(1)应用场景1——交换两个变量的值

  • 代码示例:

void swap (int *pa , int pb){
int t=
pa;
pa=pb;
*pb=t;
}// 1.定义swap函数;
2.//在主函数中对函数进行调用swap(&a,&b);
3.//输出a,b交换之后的值;

(2)应用场景2——函数返回多个值

  • 传入的参数实际上是需要保存带回的结果的变量;

  • 函数返回多个值,就需要使用指针

1)我们以一段代码为例(针对函数返回多个值的情况):

示例:输出最大值和最小值

(3)应用场景3——

  • 函数返回运算的状态,结果通过指针返回;

  • 通常情况下会让函数返回特殊的但不属于有效范围的值表示出错:常见示例-1或0;

  • 但是也会存在特殊情况:即返回的任何数值都是有效的可能结果,就会采用分开返回的方法;

2>易错点

  • (1)定义的指针变量没有指向任何变量便直接使用指针

1.我们以一段代码为例:

int i=6;
int *p;
int k;
k=12;
*p=12;

2.出错原因

在这段代码中,我们并未对p进行初始化(本地变量不会默认初始化),p未与任何变量联系在一起被赋予一个有效的值,所以在此处对p进行赋值的操作是错误的,它可能会指向不定的位置;

3.总结

任何一个地址变量在没有赋值之前(没有得到任何实际的变量之前),都不能通过*p来访问任何数据

标签:变量,示例,int,及其,地址,函数,应用,指针
From: https://www.cnblogs.com/QingYuY/p/17868671.html

相关文章

  • 我最喜欢的白版应用,AI加持的新功能开源!强烈推荐
    Excalidraw把他们的文本到图表的功能开源了Excalidraw是一个虚拟白板应用,专门用于绘制类似手绘的图表。它提供了一个无限的、基于画布的白板,具有手绘风格,支持多种功能。之前我分享的:72张PNG,图解机器学习里面的插图都是用Excalidraw绘制的。6月份我翻译这个图解机器学习时,......
  • 数据库总结复习(sql应用题 二)
    目录前言关系代数关系间运算条件表达式使用案例语法树例子前言本文针对考纲上的30分sql应用题所涉及到的知识进行归纳总结。分为两篇文章,本篇为关系代数相关知识点。关系代数关系间运算关系和关系之间需要用到以下关系运算符:其中,连接从连接条件上分,等值连接,非等值连......
  • 面试高频:双指针---6题14图一次搞懂
    使用双指针是降低算法复杂度的一个有效途径,有些问题的暴力解法时间复杂度是O(n^2),但使用双指针可以大幅度降低算法复杂度。如果面试者能将求解过程从暴力法优化到双指针,说明面试者的基础知识、代码能力、逻辑思维都是十分扎实的。同贪心算法一样,双指针的难点在于自己想不出、别人......
  • CTFpwn格式化字符串两种应用及2023ISCTF的fmt题解wp
    三个例子的引入目前我遇到的格式化字符串漏洞(formatstring,后文简称fmt)主要存在于printf函数,本文也就以printf举例。例一,标准格式的printf read(0,buf,33);printf("%s",buf);例二,占位符与变量 printf("%d%c%s",a,b,c);//%d%c%s会访问变量以输出整型,字符等。其中a,b,c为三......
  • ​IT运维产业在大数据驱动变革下的应用建议
    以下是针对IT运维产业在大数据驱动变革下的一些具体实际应用建议:1. 利用人工智能和机器学习技术实现自动化运维:通过利用机器学习算法对系统日志进行分析,可以自动化地发现故障和预测系统的性能瓶颈,提高运维的效率和准确性。同时,通过引入人工智能技术,可以实现对用户行为的智能分析和......
  • C++_类实例—指针-内存
    智能指针#g++t.cpp-std=c++11C++11中引入了智能指针的概念,方便管理堆内存智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针包含在头文件<memory>中,shared_ptr、unique_ptr、weak_ptr1......
  • SSM框架中各层次作用及其关系(三)
    SSM框架中各层次作用及其关系(三)DAO层与持久层的关系DAO(DataAccessObject)层和持久层在软件开发中是相关但不完全相同的概念。下面解释一下它们的关系:DAO层(DataAccessObject):DAO是一种设计模式,它的目标是将数据访问的逻辑从业务逻辑中分离出来,使得数据的访问操作更加模......
  • 主动控制文件内指针移动
    主动控制文件内指针移动文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的。#文件内指针的移动时以Bytes为单位的,但是在t模式下时read(n),n以字符美单位的withopen('02.txt','rt',encoding='utf-8')asf:res=f.read(3)#hel读取三个字符......
  • 不含指针的结构体赋值实现,直接内存拷贝
    #include<stdio.h>#include<stdlib.h>structA{ intc; charb[20]; charstrs[10][10]; intk;};intmain(){ //Aa={...};//帮我初始化 structAa={ 1,//Initializecwithsomeinteger "ExampleString",//Initialize......
  • SSM框架中各层次作用及其关系(二)
    SSM框架中各层次作用及其关系(二)在SSM框架(Spring+SpringMVC+MyBatis)中,各层次分工协作,形成了一种分层架构,有助于提高代码的可维护性和可扩展性。以下是SSM框架中各层次的作用及其关系:表现层(PresentationLayer):使用SpringMVC框架进行开发,负责处理用户的请求和响应。控......