python 调用C++,传递int,char,char*,数组和多维数组

本文介绍了一个C++与Python跨语言调用的例子。通过C++编写了一个包含函数test的共享库,该函数接收多种类型的参数并打印它们。接着在Python中使用ctypes库加载此共享库,并调用其中的函数。示例展示了如何传递不同类型的参数,如int、char、字符串及数组。
部署运行你感兴趣的模型镜像

//C++文件

#include<iostream>

using namespace std;

//该文件名称:cpptest.cpp

//终端下编译指令:

//g++ -o cpptest.so -shared -fPIC cpptest.cpp

//-o 指定生成的文件名,-shared 指定微共享库,-fPIC 表明使用地址无关代码

extern "C"{//在extern “C”中的函数才能被外部调用

    int test(int int_test,char char_test,char *test_string,int int_arr[4],char char_arr2[2][2]) {

        cout<<"输出参数中的int型:";

        cout<<int_test<<endl;

        cout<<"输出参数中的char型:";

        cout<<char_test<<endl;

        cout << "输出参数中的字char*字符:";

        cout<<test_string<<endl;

        cout << "输出参数中的int数组";

        for(int x = 0;x< 4;x++){cout << int_arr[x]<<"    ";}

        cout << endl;

        cout <<"输出参数中的二维数组:";

        for(int x = 0;x<2;x++){

            for(int y = 0;y<2;y++){

            cout <<char_arr2[x][y] << "    ";

            }

        }

        cout << endl;

        return 0;

    }

}

 

 

 

//py文件

import ctypes

mylib = ctypes.cdll.LoadLibrary("cpptest.so")

char_p_test = bytes("中国","utf8")#汉字需用采用utf8编码

int_arr4 = ctypes.c_int*4

int_arr = int_arr4()

int_arr[0] = 1

int_arr[1] = 3

int_arr[2] = 5

int_arr[3] = 9

char_arr2 = ctypes.c_char*2

char_arr22 = char_arr2*2

char_arr22a = char_arr22()

char_arr22a[0][0] = b'a'

char_arr22a[0][1]=  b'b'

char_arr22a[1][0] = b'c'

char_arr22a[1][1] = b'd'

mylib.test(9999,'a',char_p_test,int_arr,char_arr22a)

 

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### C++多维数组的定义 在 C++ 中,可以创建一维或多维数组来存储数据。对于二维数组而言,声明方式如下: ```cpp int twoDArray[rows][columns]; ``` 这里 `twoDArray` 是一个具有指定行数 (`rows`) 列数 (`columns`) 的整型二维数组。 #### 初始化多维数组 可以直接初始化一个多维数组,在声明的同时赋初值给它: ```cpp // 声明并初始化一个 3 行 4 列的二维数组 int matrix[3][4] = { {0, 1, 2, 3}, // 第一行 {4, 5, 6, 7}, // 第二行 {8, 9, 10, 11} // 第三行 }; ``` 也可以逐个元素地进行初始化[^1]: ```cpp matrix[0][0] = 0; matrix[0][1] = 1; ... ``` #### 动态分配内存 如果不知道编译期大小或者想要更灵活地控制资源,则可以通过指针动态创建多维数组。下面是一个例子展示如何使用指向指针的方法实现这一点: ```cpp #include <iostream> using namespace std; void createDynamicMatrix(int rowSize, int colSize){ // 创建一个指向指针类型的变量用于保存矩阵地址 int **dynamicMatrix = new int*[rowSize]; // 分配每一行的空间 for (int i = 0; i < rowSize; ++i) { dynamicMatrix[i] = new int[colSize]; } // 使用该矩阵... // 清理已分配空间 for (int i = 0; i < rowSize; ++i) { delete[] dynamicMatrix[i]; } delete[] dynamicMatrix; } ``` 需要注意的是当不再需要这些对象时应该释放它们所占用的堆上空间以防止内存泄漏。 #### 访问遍历多维数组 访问单个元素的方式类似于其他编程语言中的做法——通过提供索引来获取特定位置上的值。例如要读取上述名为 `matrix` 的二维数组中第 1 行第 2 列处的数据项可写成这样: ```cpp cout << "Element at position [1][2]: " << matrix[1][2] << endl; ``` 为了打印整个二维数组的内容,通常会采用嵌套循环结构来进行迭代操作: ```cpp for (size_t r = 0; r < rows; ++r) { for (size_t c = 0; c < columns; ++c) { cout << matrix[r][c] << "\t"; } cout << endl; } ``` 以上就是关于 C++ 多维数组的一些基本概念及其应用实例介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值