小编jka*_*ros的帖子

为什么Julia变量在for循环范围内不存在?

我正在使用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。朱莉娅为什么会这样?

julia

3
推荐指数
1
解决办法
541
查看次数

为什么递归 typedef 允许指针不匹配?

我一直在 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*)用于可读性?

c struct pointers typedef

1
推荐指数
1
解决办法
57
查看次数

标签 统计

c ×1

julia ×1

pointers ×1

struct ×1

typedef ×1