首页 > 其他分享 >将指针传递给函数

将指针传递给函数

时间:2023-02-18 12:11:24浏览次数:38  
标签:函数 int void Number 传递 nMyNumber AddFive 指针

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

#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);
}

然而,这样做的问题是 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);
}

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

int * MyFunction();

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

标签:函数,int,void,Number,传递,nMyNumber,AddFive,指针
From: https://www.cnblogs.com/wozhuyinghao/p/17132311.html

相关文章

  • day04函数
    day04函数概述:函数相当于一个代码空间,这个空间可以存储一些代码片段,一般我们会将一些功能性代码放到函数内,这样的操作是封装,核心是利用函数来减少多余代码,形成复用......
  • C语言填空:利用指针形成逆序字符串函数
    #include<stdio.h>【1】//逆序输出任意字符串voidseverse_string(char【2】str){intlen=strlen(str);char*left=str;char*right=str+le......
  • C语言填空:利用数组形成逆序字符串的函数,不用指针
    #include<stdio.h>【1】//逆序输出任意字符串voidseverse_string(chararr【2】){intlen=strlen(arr);intleft=0;intright=len-1;......
  • 指针,动态内存的例子
    #include<stdio.h>int*pPointer;voidSomeFunction();{intnNumber;nNumber=25;//makepPointerpointtonNumber:pPointer=&nNumb......
  • str_replace函数详解
    在开发过程中,字符串的操作是很频繁的,这几天有看PHP手册中讲解str_replace函数的讲解,不是很明白,特作如下笔记,以作备忘。     函数原型:mixed str_replace ( mixed $......
  • PHP输出13位时间戳函数
    functiongetUnixTimestamp(){list($s1,$s2)=explode('',microtime());return(float)sprintf('%.0f',(floatval($s1)+floatval($s2))*1000);}......
  • vue中执行异步函数async和await的用法
    在开发中,可能会遇到两个或多个函数异步执行的情况,对于Vue中函数的异步函数执行做了一个小总结,如下:异步执行使用async和await完成created(){this.init()},methods:{......
  • 智能指针 shared_ptr weak_ptr shared_from_this 笔记
    图片来自std::enable_shared_from_this有什么意义?-孔洽孔洽的回答-知乎https://www.zhihu.com/question/30957800/answer/2700292012答案参考一下,应该不完全对当......
  • 线程池的回调工作函数为什么必须设置成static,类内静态成员函数?
    线程池的回调工作函数为什么必须设置成static,类内静态成员函数?pthread_create(pthread_t*thread_tid,constpthread_attr_t*attr,void*(*start_routine)(void*),......
  • 为什么C++既有指针又有引用?
    C++从C继承了指针,所以我不能在不导致严重的兼容性问题的情况下删除它们。引用在很多方面都很有用,但我在C++中引入它们的直接原因是为了支持运算符重载。例如:void......