【为什么】将指针传递给函数

简介: 【为什么】将指针传递给函数

将指针传递给函数的能力非常有用,但也很容易掌握。 如果我们要编写一个程序,接受一个数字并将其加五,我们可能会编写如下内容:

#include <stdio.h>
void AddFive(int Number)
{
    Number = Number + 5;
}
void main()
{
    int nMyNumber = 18;
    printf("My original number is %d\n", nMyNumber);
    AddFive(nMyNumber);
    printf("My new number is %d\n", nMyNumber);
}

image.gif

然而,这样做的问题是 Number提到 AddFive是变量的副本 nMyNumber传递给函数,而不是变量本身。 因此,线 Number = Number + 5将 5 添加到 副本中,将原始变量保留在 变量的 main()不受影响。 尝试运行程序来证明这一点。

为了解决这个问题,我们可以将一个指向数字在内存中保存位置的指针传递给该函数,但我们必须更改该函数,以便它需要一个指向数字的指针,而不是一个数字。 为此,我们改变 void AddFive(int Number)到 void AddFive(int* Number), 添加星号。 这又是程序,做了一些改动。 请注意,我们必须确保我们传递的地址 nMyNumber而不是数字本身? 这是通过添加 &标志,(你会记得)被读作“地址”。

#include <stdio.h>
void AddFive(int* Number)
{
    *Number = *Number + 5;
}
void main()
{
    int nMyNumber = 18;
    printf("My original number is %d\n", nMyNumber);
    AddFive(&nMyNumber);
    printf("My new number is %d\n", nMyNumber);
}

image.gif

试着想出一个你自己的例子来证明这一点。 注意到 AddFive 函数中 Number 之前的 * 的重要性了吗? 这需要告诉编译器我们要将 5 加到变量 Number 指向的数字上,而不是将 5 加到指针本身上。 关于函数的最后一点要注意的是,您也可以从它们返回指针,如下所示:

int * MyFunction();

image.gif

在此示例中,MyFunction 返回一个指向整数的指针

相关文章
|
6天前
|
C++
定义和使用指向函数的指针变量
定义和使用指向函数的指针变量
16 1
|
6天前
|
搜索推荐 C语言 C++
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现3
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
6天前
|
存储
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现2
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
6天前
|
C语言
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现1
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
6天前
|
算法 Linux C语言
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
【Linux系统编程】深入理解Linux目录操作:文件夹位置指针操作函数(telldir,seekdir,rewinddir)
25 0
|
1天前
|
存储 编译器 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(下)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
7 0
|
1天前
|
C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(中)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
8 0
|
1天前
|
存储 数据库 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(上)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
8 0
|
1天前
|
C++
C++程序返回指针值的函数
C++程序返回指针值的函数
10 1
数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结
数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结

热门文章

最新文章