ue4c++【基础知识】

1.函数指针

 编译时,系统会为每个函数分配一段存储空间,这段存储空间的首地址称为这个函数的地址,函数名表示这个地址。我们可以用指针变量来存放这个地址,这个指针变量就叫作函数指针变量,简称函数指针

所以函数指针的定义方式为:

函数返回值类型 (* 指针变量名) (函数参数列表);
int(*p)(int, int);

定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。

int Func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = Func;          /*将Func函数的首地址赋给指针变量p*/
# include <stdio.h>
int Max(int, int);  //函数声明
int main(void)
{
    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  //定义Max函数
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}

最后需要注意的是,指向函数的指针变量没有 ++ 和 -- 运算。

2.引用

编译器不会为引用开辟新的内存空间,它不是一个变量,而是已存在变量的一个别名。它与被引用的变量共用同一块内存空间。

#include <iostream>
#include <Windows.h>
using namespace std;
//定义左值引用并初始化为变量a,以16进制打印a、temp的地址
int main()
{
	int a = 23;
	int& temp = a;
	cout << "a:" << a << '\t' << "temp:" << temp << endl;
	cout << "&a:" << std::hex << &a << '\t' << "&temp:" << &temp << endl;
	system("pause");
	return 0;
}

     引用的特点:

  1. 定义引用时必须给初始化
  2. 没有空引用
  3. 没有所谓的二级引用
  4. 一个变量可以有多个引用(就相当于一个变量有好几个别名,这是可以的)

在这里插入图片描述

关于常量引用:

常引用实际上是一种万能引用 

(1)引用普通变量,但是不能修改变量

在这里插入图片描述

 (2)引用常量

在这里插入图片描述

 (3)引用字面常量

//常量引用的格式:const int &a。
const int & a = 10;
//引用字面常量时,分两步走,首先定义一个临时量 去引用临时量 不是引用真实的字面常量10。

(4)引用其他类型的变量

double dval = 3.14;
const int& a= dval;
//实际情况为编译器生成了一个临时变量b,常量引用绑定的是临时变量b。
//const int b = dval;
//const int&a =b;

总结

int main(){

  double dval = 3.14159;

  const int &ir = 1024;                       //仅对const引用才是合法的

  const int &ir2 = dval;                      //仅对const引用才是合法的

  const double &dr = dval + 1.0;        //仅对const引用才是合法的

}

关于对数组的引用:

在引用数组时,必须知道数组的大小

int main()
{
    int a = 10;
    int b = 10;
    int ar[5] = { 1,2,3,4,5 };
    int& x 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无情的阅读机器

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值