首页 > 其他分享 >c语言指针和传引用

c语言指针和传引用

时间:2023-03-09 19:12:42浏览次数:40  
标签:这个 语言 函数 地址 引用 指针 形式参数

指针

可能已经会了,只写一个例子吧
image

形式参数和实际参数

首先一个前置知识就是一个实际参数和形式参数
实际参数:真实传给函数的参数,叫实参。
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。

这里要注意了,如果你在函数中只是传值操作的话,形式参数是不能改变实际参数的值,其实形式参数更像是实际参数的一个副本,在调用这个函数的时候创建的一个副本,然后函数调用完成之后,形式参数直接就销毁了
一个典型的例子,就是用函数实现两个数字的交换

image

我们可以看到虽然函数里面的a,b交换了,但是主函数里面的并没有交换
然后就引入我们今天的重点:传引用,和传址调用,这里我先不说传址调用了
看看这个用传引用,就可以直接对他的地址里面的东西进行操作了,然后函数中操作的就不是那个副本了

image

是不是现在还看的比较疑惑,你看看这个就明白了,其实他们操作的就是一个地址


image

image

但是你看看这个传值函数调用的时候的地址,他们的地址根本不一样,所以操作形式参数不能改变实际参数


image

数的传引用

看一下这个例子
image
首先传引用的时候函数调用的时候要传进去他的地址,
然后我们都学过指针,这个指针int p有两种写法都对,一种是int p,一种就是int p;
但是我觉得第一种比较好理解一点,就是这个int
 是一种指针类型,类似与double x;double是一种浮点数类型然后p是一个变量,这个p如果输出的话,就是一个地址,然后解引用的时候用*p,这个是输出地址里面的值,这个好像就是指针的用法。

数组的传引用

我们首先知道一个事情,假如说一个数组a[10],这个a是这个数组的首地址,a[i]才是地址里面的第i位数,a+i是第i位的地址,不用在&a了,咱们输出一下看看,正好一个int型的整数4个字节


image

所以数组在传引用的时候就不用在fun(&a)了


image

这里我个人感觉这个a[i]就是解引用了

或者说也可以这样
image

结构体的传引用

首先呢这个结构体和一个变量差不多,就是这个结构体在解引用的时候可以用->来
例如:
image

那有人就问了,为什么不输出520,因为。。。。。,没缘分呗,哈哈哈(狗头)
然后也可以这样写


image
这两个解引用的方法都可以用

结构体数组传引用

这个和数组一样的,在调用的时候用fun(p),而不是fun(&p),这个在数组那已经解释过了
image
下次更新全局变量等等,这些纯粹个人理解,如果有错误的地方,尽情谅解,私信我就行

 

标签:这个,语言,函数,地址,引用,指针,形式参数
From: https://www.cnblogs.com/lipu123/p/17198461.html

相关文章

  • GO语言学习笔记-接口篇 Study for Go ! Chapter six - Interface
    持续更新Go语言学习进度中......GO语言学习笔记-类型篇StudyforGo!Chapterone-Type-slowlydance2me-博客园(cnblogs.com)GO语言学习笔记-表达式篇Study......
  • 右值引用
    1.左值和右值一些场景下,把表达式等号左边的称为左值,右边的称为右值。但并不绝对:inta=1;intb=a;第一行,a是左值,而1是右值;第二行,b是左值,a也是左值在C++中左值一......
  • vscode c语言printf打印中文,终端输出乱码问题
    具体步骤:文件->首选项->设置->下图图标进入settings.json在settings.json中添上"code-runner.executorMap":{"javascript":"node","java":"cd$dir&&javac$f......
  • 关于Go语言的底层,你想知道的都在这里!
    目录1.GoLang语言1.1Slice1.2Map1.3Channel1.4Goroutine1.5GMP调度1.6垃圾回收机制1.7其他知识点2.Web框架Gin和微服务框架Micro2.1Gin框架2.2Micro框架2.3Vip......
  • R语言学习笔记二
    ggplot2cookbook可视化工具htmlwidgets地图leaflet时间序列dygraph网络networkD3带R接口的javascript可视化工具包plotly所有图形工具的完整列表#接下来所使用......
  • 第01章_Java语言概述
    吾心安处即吾乡。吾乡何处不可眠1.Java知识脉络图1.1Java基础全程脉络图1.2本章专题与脉络2.抽丝剥茧话Java吾心安处即吾乡。吾乡何处不可眠2.1当前大......
  • JAVAScript 跨平台客户端脚本语言
    前端内容三大基础性技术  Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解......
  • 好用的C语言代码
    全局定义的变量类型定义#ifndef__TYPEDEF__typedefsignedcharint8_t;typedefunsignedcharuint8_t;typedefsignedshortint16_t;typ......
  • 双指针:滑动窗口
    lc2379得到k个黑色快的最少operate说实话,滑动窗口还是见少了,知道有这个东西,一直没总结,刚看到题,自己还是很懵逼的,以为是dp,但是是简单题,都说用滑动窗口做,才有思路大概思......
  • 【811】R语言data.frame相关方法
    参考:R语言提取数据框data.frame的行名和列名参考:RData.frame删除某一列参考:R-按照行名或列名删除对应的行列1.获取所有行和所有列信息R语言中很多数据是data.frame......