Fortran向C傳遞NULL值

?

在很多C或C++的頭文件定義中,NULL被指定定義為0,這里不再具體展開

gfortran的手冊關于iso c binding的章節,定義NULL如下

Moreover, the following two named constants are defined:

NameType?
C_NULL_PTRC_PTR
C_NULL_FUNPTRC_FUNPTR

?

?

?

Both are equivalent to the value?NULL?in C.

據此,從Fortran向C或C++傳遞空指針還是需要一些技巧,也即需要把傳入參數設置為指針類型C_PTR

接下來是代碼:

#include "stdio.h"int test(int *a, int num)
{if(!a){printf("This is null pointer\n");}else{for(int i=0; i<num; i++){printf("Array[%d]=%d\n", i+1, a[i]);}}return 0;
}
program main
use, intrinsic:: iso_c_binding
implicit none
interfaceinteger(c_int) function func(array, n) bind(c, name="test")importimplicit noneinteger(c_int), intent(in), value:: ninteger(c_int), intent(in):: array(n)end functioninteger(c_int) function func2(pt, n) bind(c, name="test")importimplicit noneinteger(c_int), intent(in), value:: ntype(c_ptr), value:: ptend function
end interfacetype(c_ptr) :: a1
integer(c_int), target:: abc(5)
integer:: iabc = [12, 12, 35, 67, 11]
a1 = c_loc(abc(1))
! Pass array directly
i = func(abc, size(abc))
! Pass address
i = func2(c_loc(abc(1)), 5)
! Pass null pointer
i = func2(c_null_ptr, 5)
! Pass null function pointer
i = func2(c_null_funptr, 5)
end program
gfortran code_c.c code_for.f90 -o test

運行結果:

Array[1]=12
Array[2]=12
Array[3]=35
Array[4]=67
Array[5]=11
Array[1]=12 Array[2]=12 Array[3]=35 Array[4]=67 Array[5]=11
This is null pointer
This is null pointer

  

?

轉載于:https://www.cnblogs.com/pasuka/p/4773951.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256767.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視覺slam重點知識筆記

1、除了基本矩陣和本質矩陣&#xff0c;我們還有一種稱為單應矩陣&#xff08;Homography&#xff09;H 的東西&#xff0c;它 描述了兩個平面之間的映射關系。若場景中的特征點都落在同一平面上&#xff08;比如墻&#xff0c;地面等&#xff09;&#xff0c;則可以通過單應性…

iOS開發之share第三方登錄以及分享

&#xff08;1&#xff09;官方下載ShareSDK iOS 2.8.8&#xff0c;地址&#xff1a;http://sharesdk.cn/ &#xff08;2&#xff09;根據實際情況&#xff0c;引入相關的庫&#xff0c;參考官方文檔。 &#xff08;3&#xff09;在項目的AppDelegate中一般情況下有三個操作&am…

Linux磁盤的劃分

磁盤的組成&#xff1a; 磁道&#xff1a;track 扇區&#xff1a;sector (512字節) 磁頭&#xff1a;head 柱面&#xff1a;cylinder MBR/msdos 分區模式 1--4個主分區&#xff0c;或者0--3個主分區加1個擴展分區&#xff08;n個邏輯分區&#xff09; 最大支持容量為2.2TB的磁…

opencv的pnp()算法接口是相對于3D點,輸出的是相機與3D點之間的R和T

1、情況一&#xff1a; 兩幀圖像 -》 提取特征-》特征匹配-》通過2d-2d計算 F基礎矩陣、E 本質矩陣 、H 單一性矩陣 -》解析出 相機自身的運動R和T -》再通過三角化&#xff0c;將2d點轉為相機的3d點&#xff08;每個空間點在兩個相機坐標系下的投影3D坐標與像素2D坐標&#…

有限元課堂筆記03:鋼架(Frame)

1.平面鋼架(Frame)&#xff1a;是桁架(Truss)和梁(Beam)的合成&#xff0c;兩節點六自由度 2.空間鋼架&#xff1a;兩節點12自由度 相對于平面鋼架來說每一個節點增加了z軸線性變形、繞x軸扭矩&#xff0c;繞y軸扭矩 剛度矩陣

關于系統性能檢測的一些使用

1.安裝sysstat&#xff1a;yum install sysstat---------- iostat -x 1 10 如果 %util 接近 100%&#xff0c;說明產生的I/O請求太多&#xff0c;I/O系統已經滿負荷&#xff0c;該磁盤可能存在瓶頸。 idle小于70% IO壓力就較大了,一般讀取速度有較多的wait. 2.如果想對硬盤…

Python tab 補全

1. 先準備一個tab.py的腳本 shell> cat tab.py 12345678910111213141516171819#!/usr/bin/python# python tab fileimport sys import readline import rlcompleter import atexit import os # tab completionreadline.parse_and_bind(tab: complete) # history filehistfil…

Docker新手入門:基本用法

Docker新手入門&#xff1a;基本用法 1.Docker簡介 1.1 第一本Docker書 工作中不斷碰到Docker&#xff0c;今天終于算是正式開始學習了。在挑選系統學習Docker以及虛擬化技術的書籍時還碰到了不少麻煩&#xff0c;主要就是沒有特別經典的書&#xff01;Docker的《第一版Docker書…

有限元筆記04:二維實體單元

1.二維實體即平面問題 創建單元的步驟&#xff1a; 型函數&#xff08;插值函數&#xff09;>>>應變矩陣>>>剛度矩陣>>>質量矩陣>>>力的分量 1&#xff09;三角形單元 2&#xff09;面坐標 3&#xff09;線性矩形單元 4)高斯積分 6)任意…

oracle中的常用函數

一、運算符算術運算符&#xff1a; - * / 可以在select 語句中使用連接運算符&#xff1a;|| select deptno|| dname from dept; 比較運算符&#xff1a;> > ! < < like between is null in邏輯運算符&#xff1a;not and or 集合運算符&#xff1a; 集合操作不適…

SLAM后端優化之-核函數

1、核函數作用&#xff1a;保證每條邊的誤差不會大的沒邊&#xff0c;掩蓋掉其他的邊 在SLAM后端優化中&#xff0c;BA優化了所有的相機姿態和所有路標點&#xff0c;使用的最小化誤差項作的二范數平方和作為目標函數&#xff1b;當我們的誤差來源特別大的時候&#xff1b;BA優…

線程與內核對象的同步-2

等待定時器內核事件 CreateWaitableTimer( PSECURITY_ATTRIBUTES psa, BOOL fManualReset, PCTSTR pszName); 進程可以獲得它自己的與進程相關的現有等待定時器的句柄。 HANDLE OpenWaitableTimer( DWORD dwDesiredAccess, BOOL bInheritHandle, PCTSTR pszName); 等待定時器對…

【Win10 應用開發】自定義應用標題欄

Win 10 app對窗口標題欄的自定義包括兩個層面&#xff1a;一是只定義標題中各部分的顏色&#xff0c;如標題欄上文本的顏色、三個系統按鈕&#xff08;最大化&#xff0c;最小化&#xff0c;關閉&#xff09;的背景顏色等&#xff1b;另一層是把窗口的可視區域直接擴展到標題欄…

學習筆記(59):Python實戰編程-Graphics

立即學習:https://edu.csdn.net/course/play/19711/343123?utm_sourceblogtoedu 1.graphics&#xff1a;圖形界面組件的繪制&#xff0c;利用的是坐標的定位來對各個組件進行相對地位置布局 2.graphics與thinkter的區別 1&#xff09;窗口的創建上&#xff1a; win graphics…

IIS6配置Asp.net MVC運行環境

Windows server 2003 IIS6 搭建Asp.net MVC運行環境 1、安裝.Net Framework4.0。 下載地址&#xff1a; http://www.microsoft.com/zh-cn/download/details.aspx?id17718 2、安裝WindowsServer2003-KB968930-x86-CHS.exe&#xff0c;PowerShell 2.0的補丁 下載地址&#xff1…

VIO-slam 系統構建

文章目錄 目錄 文章目錄 前言 一、VIO系統數據的獲取&#xff1a;圖像傳感器選型、IMU傳感器選型 二、建立linux系統ROS環境 三、如何讀取圖像數據 四、如何讀取IMU傳感器數據 五、標定圖像和IMU數據的外參、相機的內參 六、移植VINS-MONO或者VINS-FUSION&#xff1a;主要調試獲…

MySQL5.7多源復制的實驗

MySQL5.7多源復制的實驗 node1: 192.168.2.171 master1 node2: 192.168.2.172 slave node3: 192.168.2.170 master2 node2上執行&#xff1a; change master to master_host192.168.2.171, master_userrpl, master_passwordAbcd1234, master_port3306, master_log…

最優化課堂筆記04:非線性規劃(考點4-5例題)

目錄 4.1 多元函數的泰勒展開 4.2方向導數與梯度 4.2.1方向導數 n元函數在點沿特定方向的方向導數 4.2.2梯度 4.3二次函數及正定矩陣 4.4凸函數與凸規劃 4.4.1凸函數 4.4.2凸規劃 4.4無約束優化問題的極值條件 4.5約束優化問題的極值條件&#xff08;重點考點&#x…

k近鄰算法C++二維情況下的實現

k近鄰算法C二維實現 這是一個k近鄰算法的二維實現&#xff08;即K2的情況&#xff09;。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <cmath> u…