一、值传递、指针传递、引用传递

值传递:

在值传递中,函数的形参是由实参的副本初始化的,也就是说,函数内部操作的是实参的一个拷贝。值传递适用于传递简单数据类型(如整数、浮点数、字符等)以及小型结构体等,可以避免意外的修改和副作用,但代价是需要进行大量的拷贝操作,可能会影响程序性能。

指针传递:

在指针传递中,函数的形参是指向实参的指针,因此函数内部操作的是实参本身,可以避免拷贝操作,提高程序性能。指针传递适用于传递大型数据类型(如数组、结构体等),但需要注意指针是否为空或无效等问题,以及指针所指向的数据是否被修改的风险。

引用传递:

在引用传递中,函数的形参是实参的别名,它们共享同一块内存地址,因此函数内部操作的是实参本身,而不是副本或指针。引用传递适用于传递大型数据类型,可以避免拷贝和修改的风险,但需要注意引用的有效性和作用域。

二、指针传递和引用传递:如何选择

在C语言中,指针传递和引用传递都是常见的传递方式,各有其优缺点,具体使用时需要根据实际情况来选择。

指针传递和引用传递的最大区别在于形参的声明方式。在指针传递中,形参是一个指针类型,需要使用*来解引用;而在引用传递中,形参是一个引用类型,不需要使用*来解引用。两种传递方式都可以在函数内部对实参进行修改,都可以避免拷贝操作,提高程序性能。

一般来说,如果需要在函数内部修改实参的值,并且实参是一个简单数据类型(如整数、浮点数、字符等),那么建议使用指针传递。因为引用传递只适用于C++中的引用类型,在C语言中则需要通过指针来实现类似的效果。

如果需要传递大型数据类型(如结构体、数组等)或多个参数,可以使用指针传递或引用传递。但需要注意,使用指针传递时需要确保指针的有效性和安全性,避免非法访问或悬垂指针等问题;而使用引用传递时需要注意引用的作用域和生命周期,以及是否会对源数据造成修改等问题。

综上所述,选择使用指针传递或引用传递,需要根据实际情况进行权衡和选择。如果不确定应该使用哪种传递方式,可以根据数据类型、程序安全性、代码清晰度等因素来考虑,并进行适当的试验和测试,以达到最优的设计效果。

值传递适用于传递简单数据类型和不需要修改实参的函数;指针传递适用于传递数组、结构体等较大的数据类型,或者需要修改实参的函数;引用传递适用于传递较大的数据类型,并且需要在函数内部修改实参的值。总之,在选择传递方式时需要考虑到效率、安全性和代码的可读性等因素,以确保程序的正确性和稳定性。

非法访问或悬垂指针定义

非法访问或悬垂指针是指试图访问一个已经被释放或者未被正确初始化的指针所指向的内存,这样的操作通常会导致程序崩溃、数据损坏等严重问题。

非法访问指针通常发生在以下几种情况中:

指针未被正确初始化:在定义指针时没有初始化它的值,或者采用不可预期的值来初始化,这样的指针可能指向了一个随机的地址。如果尝试使用这样的指针访问内存,很可能会读取到错误的数据或者写入到错误的地址,导致程序运行异常。

指针越界:如果指针超出了它指向内存块的边界范围,也会导致访问非法内存。例如,在使用指针访问数组元素时,如果指针的偏移量超过了数组的长度,则访问就越界了。

释放指针后继续使用:如果在释放完指针所指向的内存之后,仍然继续使用这个指针,这样的操作就是非法的。因为已经释放的内存可能已经被其他程序或系统调用使用,如果继续使用这样的指针,就会导致数据损坏或非法访问。

悬垂指针指的是已经被释放的指针,这类指针虽然不再指向有效的内存地址,但是程序中仍然可能对其进行引用,导致非法访问、数据损坏等问题。避免悬垂指针的方法是要确保在释放指针之后,立即将指针设为 NULL,这样就可以避免对已经无效的指针进行误用。

为了避免非法访问和悬垂指针的问题,需要在程序设计和实现过程中严格控制指针的使用,并进行错误检查和处理。建议在定义指针时进行初始化,避免采用随机的、未定义的值。在使用指针访问内存之前,需要先检查指针是否为空或有效,避免越界或非法访问。在释放指针所指向内存之后,需要立即将指针设为 NULL,避免悬垂指针的出现。

day3 函数的定义和调用,练习编写简单的程序(记录2)的更多相关文章

  1. Python函数的定义与调用、返回值、参数

    一.函数是什么 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.比如print(),len()等.但你也可以自己创建函数,这被叫做用户自 ...

  2. Kotlin基础(二)函数的定义与调用

    函数的定义与调用 一.预备知识:在Kotlin中创建集合 fun main(args: Array<String>) { //Kotlin中定义各自集合 val ,,,) val list ...

  3. 12_传智播客iOS视频教程_注释和函数的定义和调用

    OC的注释和C语言的注释一模一样.它也分单行注释和多行注释. OC程序里面当然可以定义一个函数.并且定义的方式方法和调用的方式方法和我们C语言是一模一样的.OC有什么好学的?一样还学个什么呢? 重点是 ...

  4. python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  5. C#基础知识-函数的定义和调用(五)

    函数也可以称为方法,可以很方便的把一些行为封装到函数里面,当调用这一函数时会把函数块里面的代码按照顺序执行,方法可以有多种形式,有无参数,有无返回值等. 1. 函数的定义   函数定义的基本格式: s ...

  6. JavaScript学习笔记(七)——函数的定义与调用

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  7. Python基础--函数的定义和调用

    一.函数的作用: 提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰 二.函数的定义:函数遵循先定义后调用的原则 1.无参函数 def funcname(): #def 是关键字,后跟函数 ...

  8. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  9. python中函数的定义与调用

    1.为什么要用函数? (1)代码重复太多(2)可读性差 使用函数的好处: (1)代码重用 (2)保持一致性,易维护 (2)可扩展性 2.初始函数定义与调用     函数的定义 def test(x): ...

  10. Swift 函数的定义与调用(Defining and Calling Functions)

    当你定义一个函数时,你能够定义一个或多个有名字和类型的值.作为函数的输入(称为參数.parameters).也能够定义某种类型的值作为函数运行结束的输出(称为返回类型). 每一个函数有个函数名,用来描 ...

随机推荐

  1. sql:常用:group by 多个字段

    首先group by 的简单说明:   group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素:   (1) 出现在select后面的字段 ...

  2. 【Operating System】——An interesting question on Process Creation

    In the book Operating System Concepts- 9th Edition - Chapter 3 - Page 117 - Page 120 it says: How do ...

  3. Liunx安装Docker

    1.更新yum包到最新 sudo yum update 2.卸载历史Docker,如果没有安装过,则跳过该步 sudo yum remove docker \ docker-client \ dock ...

  4. OpenStack 云主机ping通外网

  5. uni-app微信小程序文本框计数功能

    <view> <textarea placeholder="请输入" @input="sumfontnum" :maxlength=" ...

  6. Java实现简单的大顶堆

    Java实现简单的大顶堆 今天刷LeetCode的347. 前 K 个高频元素的时候使用到了优先队列,由于对大顶堆掌握不算熟练,于是写了一个简单大顶堆练手: 实现代码在最后 之前很少使用泛型来写代码, ...

  7. ext表单合并行

    在js里加入方法 /*** 合并Grid的数据列* @param grid {Ext.Grid.Panel} 需要合并的Grid* @param colIndexArray {Array} 需要合并列 ...

  8. eclipse静态资源保存不重启(热部署静态资源/html)

    简单的来说就是windows->Prefrence->搜索 build automatically 并勾选就可以 不同的版本设置选项可能略微不同,其实比较简单但是新手可能不好找,所以帮到的 ...

  9. 09 Hive安装与操作

    一.安装Hive 下载解压重命名权限 配置环境变量 修改Hive配置文件 修改/usr/local/hive/conf下的hive-site.xml 1 2 3 4 5 6 7 8 9 10 11 1 ...

  10. 第12组 Beta冲刺 (2/5)

    1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/14016602.html ·作业博客:https://edu.cnb ...