C++入门教程(六、指针)

35 篇文章 9 订阅
本文是C++入门教程系列的第五讲,重点讲解指针的概念和使用。指针作为C++中的重要特性,允许直接访问和修改内存地址中的值。通过指针,可以实现变量值的交换,解决按值调用时的问题。文章介绍了指针的声明、赋值及取值操作,并通过实例展示了如何在函数中使用指针改变外部变量的值。
摘要由CSDN通过智能技术生成

前面教程汇总

第一讲

C++入门教程(一、初步了解)

第二讲

C++入门教程(二、基本数据类型)

第三讲

C++入门教程(三、数组、注释与函数)

第四讲

C++入门教程(四、运算符与表达式)

第五讲

C++入门教程(五、数组与字符串)

指针

注:本文中的所有内容均同时适用于C++和C语言。

前言

指针其实很简单。同C语言和C++中其他变量一样,把指针也看成是一种变量即可,这种变量专门存储地址值。

int a = 100;
int* b = &a;

上面的代码很清晰,a 是一个整形变量,值为 100b 是一个指针变量,值是变量 a 的地址。变量和指针的类型必须相同。

本文主要讲利用指针变量如何读写地址中的值。

正文

首先来假设一个场景:交换 ab 两个变量的值。看下面的例子:

void swap(int x, int y)
{
    int tmp = x;
    x = y;
    y = tmp;    
}
void change()
{
    int a = 100;
    int b = 200;
    swap(a, b);
}

结果 ab 的值并没有交换成功。原因是:C和C++的程序在调用函数时使用“按值调用”,这意味着变量的值直接从调用函数复制到被调函数的实参中,“按值调用”是C语言和C++中调用函数的唯一方式。

C和C++通过创建指针的方式解决上述问题。
尽管声明指针变量的形式稍微复杂一点点,指针就是个保存变量地址的变量而已。指针常见操作如下:

第一类:创建指针变量,“ 基本类型 + * ”。

int* iptr;
char* cptr;
double* dptr;

第二类:给指针变量赋值,“ & + 变量 ”。

int a = 100;
char b = 'o';
double c = 100.5;

int* iptr;
char* cptr;
double* dptr;

iptr = &a;
cptr = &b;
dptr = &c;

第三类:取指针变量保存的地址中的值,“ * + 指针变量”。

int a = 100;
int* iptr = &a;
int b = *iptr;

于是,上面的代码改写成:

void swap(int* x, int* y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;   
}
void change()
{
    int a = 100;
    int b = 200;
    swap(&a, &b);
}

一个函数只能访问自己的栈帧。
但是,通过指针,一个函数可以间接地读写另一个栈帧中的变量值。
值得注意的是,函数之间利用指针读写是有方向的。如果函数 F1 调用 F2 ,则 F2 可以读写 F1 中的变量值,反之不行。很好理解,F2 得栈帧先出栈,出栈后变量都没有了,F1 还读写什么呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungGeeker

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值