跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • C 语言指针传递的问题
未分類
3 12 月 2020

C 语言指针传递的问题

C 语言指针传递的问题

資深大佬 : black11black 2

这个是 C++和 Python 混合编程的问题,所以严格来说似乎标题不准确?

如同前几天发的帖子里所说,我仍在进行 cython 编程测试,为了在 C 的基本语法下在 cython 中复现一些 python 常见操作。

比如以下这个场景:我在命名空间 main 中有一个数组(或者向量) a,我希望将 a 丢入某个函数处理过后,函数没有返回值,但 a 被修改,这种显然是传入一个指针,在 python 中类似于传入 list 或者 dict 的操作。

测试代码如下:

# distutils: language=c++ import cython from libcpp.vector cimport vector  cdef operation(vector[cython.float] *p):     p.push_back(99)  def main():     # 首先准备一个向量      cdef vector[cython.float] lst     cdef int i      for i in range(5):         lst.push_back(i)     # 丢入函数     operation(&lst)     # 查看结果     print(lst) 

以上代码是能够运行的,返回结果[0,1,2,3,4,99],符合预期。 但是仍有一些疑惑,既然输入函数的&lst 是指针的话,那 operation 函数中调用这个指针值的时候,不是应该前面加星号才能取到实际对象么,所以不是应该是*p.push_back(99)才能生效才对,为什么不需要加也能运行呢。

其次将上文中 operation 函数内容修改为 p[0] += 1,上次尝试新增项目,这次尝试修改项目,期望返回值为[1,1,2,3,4],然而编译报错

test.cpp(1191): error C2676: 二进制“+=”:“std::vector<float,std::allocator<_Ty>>”不定义该运算符或到 预定义运算符可接收的类型的转换         with         [             _Ty=float         ] 

为什么会报错,两者有什么区别呢?

大佬有話說 (3)

  • 資深大佬 : Jabin

    operation *p 是指针,传入参数&lst 是地址,*p 指向 lst 地址,p[0] 是 lst[0]的地址+1 重新赋值,指向哪里就不知道了

  • 資深大佬 : sujin190

    你得看 cython 转换成 c 调用 gcc 编译时的代码是啥样的,也许 cython 的语法就是这样的呢

  • 主 資深大佬 : black11black

    @Jabin p0 是可以取值的比如 print p0 这种是可以执行的,但是不能加一,就很怪

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具