我正在使用Julia进行一些基本的集成估算,并使用以下代码获取UndefVarError:
using ExcelReaders
er = ExcelReaders
etInt = 0
waveLen = er.readxl("AM0AM1_5.xls", "Spectra!A3:A2004")
eT = er.readxl("AM0AM1_5.xls", "Spectra!B3:B2004")
gTilt = er.readxl("AM0AM1_5.xls", "Spectra!C3:C2004")
dirSol = er.readxl("AM0AM1_5.xls", "Spectra!D3:D2004")
function trArea(r::Real, l::Real, v::Array, x::Int)
return ((1/2) * (v[x] + v[x+1]) * (r-l))
end
for x in 1:length(waveLen)-1
etInt += trArea(waveLen[x], waveLen[x+1], eT, x)
end
Run Code Online (Sandbox Code Playgroud)
错误指向第16行。据我所知,这意味着在for循环范围内未定义etInt。朱莉娅为什么会这样?
我一直在 learn-c.org 上学习 C
在介绍了有关 typedef 声明和结构的单元之后。他们完成了他们所谓的“链表的递归定义”,我发现相当简单,除了看起来不匹配的指针......
typedef struct node{
int val;
struct node* next;
}node_t
// usage
node_t* head = NULL;
head = (node_t*) malloc(sizeof(node_t));
head->val = 1;
head->next = (node_t*) malloc(sizeof(node_t));
head->next->val = 2;
head->next->next = (node_t*) malloc(sizeof(node_t));
head->next->next->val = 3;
Run Code Online (Sandbox Code Playgroud)
我的理解是,通过提供typedef struct node,我们能够next在结构中声明节点指针。
我的困惑发生在第 11 行。我们为下一个节点动态分配内存,但我们将 void 指针转换为指针node_t,而不是node指针——尽管事实上它head->next是一种(node*)类型。为什么这是允许的?C 是否只是(node*)在幕后重铸为 a,并(node_t*)用于可读性?