指针作为函数参量

指针作为函数参量,以地址的方式传递数据,可以用来返回函数处理结果;实参是数组名时形参可以是指针。

题目:读入三个浮点数,将整数部分和小数部分分别输出

#include <iostream>

using namespace std;

void  splitfloat(float x, int *intpart,  float *fracpart)

{  //形参intpart fracpart是指针

   *intpart=int(x); // x的整数部分

   *fracpart=x-*intpart; //x的小数部分

}

int main()

{

         int i, n;

         float x, f;    

         cout<<"Enter three(3) floating point numbers"
    << endl;

         for (i = 0; i < 3; i++)

         {

           cin >> x;

           splitfloat(x,&n,&f); //变量地址做实参

           cout<<"Integer Part is "<< n
      <<"   Fraction Part is "<<f<<endl;

         }

}

运行结果:

 

Enter three(3) floating point numbers

4.7

Integer Part is 4 Fraction Part is 0.7

8.913

Integer Part is 8 Fraction Part is 0.913

-4.7518

Integer Part is -4 Fraction Part is -0.7518

输出数组元素的内容和地址

#include <iostream>

#include <iomanip>

using namespace std;

void Array_Ptr(long *P, int n)

{        int i;

         cout<<"In func, address of array is "
    <<unsigned long(P)<<endl;

         cout<<"Accessing array using pointers"<< endl;

         for (i = 0; i < n; i++)

         { cout<<"   Address for index "<<i<<" is "
      <<unsigned long(P+i);

           cout<<"  Value is "<<*(P+i)<<endl;

         }

}

int main()

{        long list[5]={50, 60, 70, 80, 90};

                   cout<<"In main, address of array is "

      << unsigned long(list)<<endl;

         cout<<endl;

                 Array_Ptr(list,5);

}

某一次运行结果:

In main, address of array is 6684132

In func, address of array is 6684132

Accessing array using pointers

   Address for index 0 is 6684132  Value is 50

   Address for index 1 is 6684136  Value is 60

   Address for index 2 is 6684140  Value is 70

   Address for index 3 is 6684144  Value is 80

   Address for index 4 is 6684148  Value is 90

用指向常量的指针做形参

#include<iostream>

using namespace std;

const int N=6;

void print(const int *p,int n);

int main()

{  int array[N];

    for(int i=0;i<N;i++)

         cin>>array[i];

    print(array,N);

}

void print(const int *p, int n)

{

     cout<<"{"<<*p;

     for(int i=1;i<n;i++)

         cout<<"."<<*(p+i);

     cout<<"}"<<endl;

}

当函数的返回值是地址时,该函数就是指针型函数。声明:存储类型 数据类型 *函数名();

指向函数的指针  存储类型 数据类型 *函数名)();数据指针指向数据存储区,而函数指针指向的程序代码的存储区(函数名是函数代码的恰是地址)。

#include <iostream>

using namespace std;

void print_stuff(float data_to_ignore);

void print_message(float list_this_data);

void print_float(float data_to_print);

void (*function_pointer)(float);       //void类型的函数指针

 

int main()   //主函数

{

         float pi = (float)3.14159;

         float two_pi = (float)2.0 * pi;

         print_stuff(pi);

         function_pointer = print_stuff;        //函数指针指向print_stuff

      function_pointer(pi);    //函数指针调用,相当于调用print_stuff

      function_pointer = print_message; //函数指针指向print_message

      function_pointer(two_pi);      //函数指针调用

      function_pointer(13.0);          //函数指针调用

      function_pointer = print_float;       //函数指针指向print_float

      function_pointer(pi);    //函数指针调用

      print_float(pi);

}

void print_stuff(float data_to_ignore)

{        cout<<"This is the print stuff function.\n";    }

void print_message(float list_this_data)

{        cout<<"The data to be listed is "<<list_this_data<<endl;    }

void print_float(float data_to_print)

{        cout<<"The data to be printed is "<<data_to_print<<endl;    }

//运行结果:

 This is the print stuff function.

 This is the print stuff function.

 The data to be listed is 6.283180

 The data to be listed is 13.000000

 The data to be printed is 3.141590

 The data to be printed is 3.141590

C++——指针3的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  3. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  4. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  5. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

  6. Marshal.Copy将指针拷贝给数组

    lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...

  7. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. 智能指针shared_ptr的用法

    为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...

  10. 智能指针unique_ptr的用法

    unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...

随机推荐

  1. jquery带下拉列表的购物车组件封装

    按照国际惯例先放效果图 安静的时候它长这样 等待加载时它长这样(功能是设置的按需加载,网速慢或者加载数据大时会出现) 加载之后购物车没有商品时这样 有商品长这样 接下来放代码: cart.html & ...

  2. 零基础学到什么程度可以找一份web前端工作?

    能找到一份前端开发工作,首先你起码得是一个合格的初级前端工程师.那么,什么是初级前端工程师?初级前端工程师都会做些什么?这个问题需要分为以下几个方面来说: 一.对应岗位的工作职责初级前端,主要负责产品 ...

  3. spring mvc5 的 配置文件 pom.xml

    spring mvc5 的 配置文件  pom.xml <?xml version="1.0" encoding="UTF-8"?> <pro ...

  4. 【Mac电脑新手技巧】苹果电脑如何更换用户头像?

    想给Mac电脑换一个喜欢的用户头像?苹果电脑的用户头像如何更换? 对于很多Mac小白来说,给自己的Mac换一个可心的用户头像很是必要.但是,大多数Mac新手都觉得无从下手!如果你也想给自己的Mac换一 ...

  5. java 测试 (junit+ junit 断言 + postman)

    实际开发中,除了开发,我想测试也是必不可少的一环吧.从简单的@Test .main 方法测试 到 页面测试 ,断言,postman. bug是无处不在,随时发生的事,高效率的调试.检测可以节省大量的开 ...

  6. 基于90nm CMOS技术的功能齐全的64Mb DDR3 STT-MRAM

    自旋转矩磁阻随机存取存储器(ST-MRAM)有望成为一种快速,高密度的非易失性存储器,可以增强各种应用程序的性能,特别是在用作数据存储中的非易失性缓冲器时设备和系统.为此,everspin开发了基于9 ...

  7. Selenium实战(四)——unittest单元测试框架1

    Python中的单元测试框架包含:doctest.unittest.pyttest.nose等,使用unittest单元测试框架不需要自行定义断言失败的提示,并且当一个测试函数执行失败后,后面的测试函 ...

  8. python 3.6 安装 opencv 3.4

    一种说法是,到opencv官网下载相应的版本opencv,解压,把cv2.pyd放到 python安装文件夹下的\Lib\site-packages里即可, 此时import cv2即可成功 我的没有 ...

  9. Python带你来一次说走就走的环球旅行

      image 1.目 标 场 景 十一长假,相信大部分的朋友这会应该是在全国各地浪或者是在浪的路上,朋友圈成为你们表演的场所. 当然,也有一小戳朋友是选择家里蹲,你们是否感觉到无聊?是否想出去浪,参 ...

  10. java线程池之synchronized锁

    //Object 定义了一个引用类型的对象用于加锁 static Object Lock = new Object(); //定义一个int类型变量0做初始值 static int iCheck = ...