程序员社区

函数指针

形式:数据类型(*指针变量名字)(参数的数据类型1,参数数据类型2…)=函数名(或者强制类型转换后的函数地址)

下面为Qt中的c语言代码:
函数名地址,变量地址等在vs中会一直变,因为每次启动程序都要重新分配内存,在qt中不会变,所以可以直接对函数名地址进行强制类型转换

#include "mainwindow.h"
#include<stdio.h>
#include <QApplication>
#include<QDebug>
void func(int a, int b)
{
    printf("%d+%d\n", a, b);
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    //函数名是函数首地址
    printf("%d\n", func);
    //函数指针
    void(*fun)(int, int) = func;
    //强制类型转换,12980724---func函数名首地址,函数名地址在vs中会一直变,在qt中不会变
    void(*fun1)(int, int) = (void(*)(int,int))4200025;
    fun(10,20);
    fun1(30, 40);
    return a.exec();
}

在这里插入图片描述
也可以用Qt中qDebug来写

#include "mainwindow.h"
#include<stdio.h>
#include <QApplication>
#include<QDebug>
void func(int a, int b)
{
   qDebug("%d+%d\n", a, b);
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    //函数名是函数首地址
     qDebug("%d\n", func);
    //函数指针
    void(*fun)(int, int) = func;
    //强制类型转换,12980724---func函数名首地址,函数名地址在vs中会一直变,在qt中不会变
    void(*fun1)(int, int) = (void(*)(int,int))4200025;
    fun(10,20);
    fun1(30, 40);
    return a.exec();
}

vs中只能用下面这种:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void func(int a, int b)
{
	printf("%d+%d", a, b);
}
int main()
{
	//函数指针
	void(*fun)(int, int) = func;
	fun(10,20);
	return 0;
}

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 函数指针

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区