函数指针

2022-05-05 19:02:35 浏览数 (1)

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

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

代码语言:javascript复制
#include "mainwindow.h"
#include<stdio.h>
#include <QApplication>
#include<QDebug>
void func(int a, int b)
{
    printf("%d %dn", a, b);
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    //函数名是函数首地址
    printf("%dn", 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来写

代码语言:javascript复制
#include "mainwindow.h"
#include<stdio.h>
#include <QApplication>
#include<QDebug>
void func(int a, int b)
{
   qDebug("%d %dn", a, b);
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    //函数名是函数首地址
     qDebug("%dn", 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中只能用下面这种:

代码语言:javascript复制
#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 人点赞