我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C/C++中的指针的应用及注意问题是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C/C++中的指针的应用及注意问题是什么

本篇内容介绍了“C/C++中的指针的应用及注意问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、我们先来回忆一下指针的概念吧,方便下面的介绍

指针是存放地址值的变量或者常量。例如:int a=1;&a就表示指针常量(“&”表示取地址运算符,也即引用)。int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,至于具体使用方法,如赋值等,很多书都有介绍,我就不多说了。

二、应用以及注意的问题

1、 理解指针的关键所在——对指针类型和指针所指向的类型的理解

①、 指针类型:可以把指针名字去掉,剩下的就是这个指针

例如:int *a;//指针类型为int *

int **a;//指针类型为int **

int *(*a)[8];//指针类型为 int *(*)[8]

②、 指针所指向的类型:是指编译器将把那一片内存所看待成的类型。这里只要把指针声明语句中的指针名字和名字右边的“*”号去掉就可以了,剩下的就是指针所指向的类型。我之所以把他们放在***位,是因为弄清楚他们是学c/c++指针的重点,正确理解他们才能使你打好c/c++的编程基础。

2、 指针的应用——传递参数。

其实它可以相当于隐式的返回值,这就比return的方法更加灵活了,可以返回更多的值,看看下面的例子自然就明白了:

#include "iostream.h"  void example(int *a1,int &b1,int c1)  {  *a1*=3;  ++b1;  ++c1;  }  void main()  {  int *a;  int b,c;  *a=6;  b=7;c=10;  example(a,b,c);  cout 《"*a="《*a<  cout 《"b="<  cout 《"c="<  }

输出:*a=18

b=8

c=10

注意到没有,*a和b的值都改变了,而c没有变。这是由于a1是指向*a(=6)的指针,也即与a是指向同一个地址,所以当a1指向的值改变了,*a的值也就改变了。在函数中的参数使用了引用(int &b1),b1是b的别名,也可以把它当作特殊的指针来理解,所以b的值会改变。函数中的参数int c1只是在函数中起作用,当函数结束时候便消失了,所以在main()中不起作用。

3、 关于全局变量和局部变量的一个问题

先看看程序:

#include “iostream.h”  int a=5;  int *example1(int b)  {  a+=b;  return &a;  }  int *example2(int b)  {  int c=5;  b+=c;  return &b;  }  void main()  {  int *a1=example1(10);  int *b1=example2(10);  cout 《”a1=”《*a1<  cout 《”b1=”《*b1<  }

输出结果:

a1=15

b1=4135

*b1怎么会是4135,而不是15呢?是程序的问题?没错吧?由于a是全局变量,存放在全局变量的内存区,它一直是存在的;而局部变量则是存在于函数的栈区,当函数example2调用结束后便消失,是b指向了一个不确定的区域,产生指针悬挂。

下面是对example1和example2的反汇编(用TC++ 3.0编译):

example1:

push bp;入栈

mov bp,sp

mov ax,[bp+04];传递参数

add [00AA],ax;相加

mov ax,00AA ;返回了结果所在的地址

pop bp;恢复栈,出栈

ret;退出函数

example2:

push bp;入栈

mov bp,sp

sub sp,02

mov word ptr [bp-02],0005

mov ax,[bp-02];传递参数

add [bp+04],ax;相加

lea ax,[bp+04];问题就出在这里

mov sp,bp

pop bp;恢复栈,出栈

ret;退出函数

对比之后看出来了吧?ax应该是存储的是结果的地址。而在example2中,返回的却是[bp+04]的内容,因此指针指向了一个不确定的地方,由此产生的指针悬挂。example1中,ax返回了正确的结果的地址。

4、 内存问题:使用指针注意内存的分配和边界

使用指针过程中应该给变量一个适当的空间,以免产生不可见的错误。

请看以下代码:

#include “iostream.h”  void main()  {  char *a1;  char *a2;  cin 》a1;  cin 》a2;  cout 《”a1=”<  cout 《”a2=”<  }

输入:abc

123

输出:

a1=123

a2=

Null pointer assignment

指针指向了“空”。解决办法就是分配适当的内存给这两个字符串。修正后的代码

如下:

#include “iostream.h”  void main()  {  char *a1;  char *a2;  a1=new char [10];  a2=new char [10];  cin 》a1;  cin 》a2;  cout 《”a1=”<  cout 《”a2=”<  delete(a1);//注意,别忘了要释放内存空间  delete(a2);  }

到此就能输出正确的结果了。分配了适当的内存之后要注意释放内参空间,同时还应该注意不要超出所分配的内存的大小,否则会有溢出现象产生,导致不可预料的结果。

5、 关于特殊的指针&mdash;&mdash;引用

引用有时候应用起来要比指针要灵活,用它做返回的时候是不产生任何变量的副本的这样减小了内存的占用,提高执行的速度。引用使用起来要比指针好理解,比较直观。当引用作为参数时,不会改变参数的地址,因此可以作为左值。

下面请看一个例子:

#include “iostream.h”  char ch[5]=”ABCD”;  char &example(int b)  {  return ch;  }  void main()  {  cout 《”ch=”<  example(2)=”c”;  cout《”ch=”<  }

输出结果:

ch=ABCD

ch=ABcD

在实际编程过程中,可以灵活地引用或指针,尽量提高程序的可读性和执行效率。

“C/C++中的指针的应用及注意问题是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C/C++中的指针的应用及注意问题是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C/C++中的指针的应用及注意问题是什么

本篇内容介绍了“C/C++中的指针的应用及注意问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、我们先来回忆一下指针的概念吧,方便
2023-06-17

C++中的指针问题及引用问题详解

C++中的指针问题及引用问题详解在C++编程中,指针和引用是两个非常重要的概念。它们可以用于对变量进行间接访问,提高程序的灵活性和效率。然而,指针和引用也容易导致一些问题,本文将详细探讨这些问题,并提供具体的代码示例。指针问题:空指针访问:
2023-10-22

C++中指针问题及引用问题的解决方法

C++中指针问题及引用问题的解决方法在C++编程中,指针是一种非常重要的数据类型,允许我们直接访问内存地址。然而,指针也经常会导致一些问题,例如空指针引用和悬空指针引用。此外,我们还经常会遇到引用问题,例如引用类型的函数参数传递和返回值引用
2023-10-22

C++中的this指针有什么用

这篇文章主要介绍“C++中的this指针有什么用”,在日常操作中,相信很多人在C++中的this指针有什么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中的this指针有什么用”的疑惑有所帮助!接下来
2023-06-17

C++中指针问题和引用问题的解决方法

C++中指针问题和引用问题的解决方法引言:在C++编程过程中,指针问题和引用问题是常见的困扰程序员的难题。本文将介绍一些解决这些问题的方法,并通过具体的代码示例进行说明,帮助读者更好地理解和应用。一、指针问题的解决方法空指针检测在使用指针之
2023-10-22

c++智能指针的作用是什么

C++智能指针的作用是管理动态分配的内存资源,确保资源的正确释放,避免内存泄漏和野指针的出现。智能指针能够自动在适当的时机释放所引用的对象所占用的内存,从而简化了手动内存管理的复杂性。智能指针通过在底层管理一个计数器来追踪对象的引用次数,
2023-10-26

C++中指针与引用的区别是什么

这篇文章主要介绍了C++中指针与引用的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中指针与引用的区别是什么文章都会有所收获,下面我们一起来看看吧。1、指针的声明上文中提到,指针和其所指向的变量
2023-06-19

c语言指针的作用是什么

C语言中的指针是一种特殊的数据类型,它用于存储变量的内存地址。指针的作用主要有以下几个方面:1. 内存管理:通过指针,可以动态地分配和释放内存,从而实现灵活的内存管理。例如,可以使用指针来动态创建数组、链表等数据结构。2. 传递参数:通过指
2023-08-18

C++指针传递的作用是什么

这篇文章主要介绍了C++指针传递的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++指针传递的作用是什么文章都会有所收获,下面我们一起来看看吧。具体如下void pointerTest(int nu
2023-07-05

C++ 函数指针的作用是什么?

函数指针是指向函数的变量,允许动态调用函数,无需在编译时知道实际函数。作用包括:动态函数调用、回调函数、事件处理和策略模式。实战案例包括:动态函数调用(通过函数指针调用特定函数)、回调函数(将函数作为回调参数传递给其他函数)、事件处理(在特
C++ 函数指针的作用是什么?
2024-04-14

C++引用的特点及与指针的区别是什么

这篇文章主要讲解了“C++引用的特点及与指针的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++引用的特点及与指针的区别是什么”吧!一.引入在生活中,我们可能也会给一些同学起外号
2023-06-30

c语言中指针的概念是什么

在C语言中,指针是一个变量,其值为内存地址。它可以指向内存中的某个位置,存储了该位置的值或者其他变量的地址。通过指针,可以直接访问和操作内存中的数据。指针的概念为程序提供了一种间接访问和处理数据的方式,可以允许程序在运行时动态地分配和释放
c语言中指针的概念是什么
2024-02-29

C++中指针常量与常量指针的区别是什么

在C++中,指针常量和常量指针是不同的概念。1. 指针常量(Pointer to constant):指针本身是一个常量,即指针的值不能被修改,但是它所指向的值可以被修改。声明一个指针常量时,要在指针类型前加上const关键字。示例:```
2023-08-16

C++ 中函数指针的使用方法是什么?

函数指针是一种指向函数的指针,用于实现回调、匿名函数和泛型编程。语法:returntype (*functionname)(parameterlist)。使用:声明一个指向所需函数类型的指针,并使用像其他指针一样使用函数指针。实战案例:实现
C++ 中函数指针的使用方法是什么?
2024-04-12

C语言void指针的用法是什么

C语言中的void指针是一种特殊的指针类型,可以用来表示任意类型的指针。具体来说,void指针可以指向任何数据类型的内存地址,但它本身不知道该地址所存储的数据类型,因此在使用void指针时需要进行类型转换。使用void指针的主要用途如下:1
2023-09-15

C#中+=是什么意思及+=的用法

这篇文章主要介绍了C#中+=是什么意思及+=的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-23

C#中DialogResult.OK指的是什么意思

在C#中,DialogResult.OK是一个枚举值,它表示对话框的结果为“确定”或“成功”。当用户点击对话框中的“确定”按钮或执行了某些操作后,可以将对话框的结果设置为DialogResult.OK。这通常用于判断对话框是否成功关闭或用户
C#中DialogResult.OK指的是什么意思
2024-02-29

C++中使用系统函数时应注意的哪些问题

本篇内容主要讲解“C++中使用系统函数时应注意的哪些问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中使用系统函数时应注意的哪些问题”吧!我们知道,函数必须先进行定义或说明之后才能在程序
2023-06-17

C语言中数组和指针的作用是什么

这篇文章将为大家详细讲解有关C语言中数组和指针的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。指针相信大家对下面的代码不陌生:int i=2;
2023-06-17

Java引用与C指针的区别是什么

Java引用与C指针的区别如下:1、现象指针在运行时可以改变其所指向的值(地址)即指向其它变量,而引用一旦和某个对象绑定后就不能再改变,总是指向最初的对象。2、编译程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名以及变量所对应的地址。(相关视
Java引用与C指针的区别是什么
2022-03-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录