小编Yoh*_*oth的帖子

C语言编程。如果需要在头文件(.h)中引用其实例,如何在.c中隐藏该结构的实现

因此,我很好奇如果需要在头文件中引用其实例的情况下如何在.c文件中隐藏该结构的实现。例如,我在头文件中具有以下结构:

struct List
{
    NodePtr front;    
};
Run Code Online (Sandbox Code Playgroud)

我想在.c文件中声明NodePtr以隐藏其实现。在.c中:

struct Node
{
    void *value;
    struct Node *next;
};

typedef struct Node *NodePtr;
Run Code Online (Sandbox Code Playgroud)

但是,当然.h文件并不知道NodePtr是什么。

我将如何以正确的方式做到这一点?

c struct

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

棘手的C练习与指针有关.需要帮助来理解解决方案

请考虑以下代码:

int *foo (int x) {
int a[2];
a[0] = x;
a[1] = x + 1;
return a;
}
…
int *p1 = foo(2);
int *p2 = foo(3);
Run Code Online (Sandbox Code Playgroud)

在此代码段结束时,以下各项的值是什么?(给出答案)

 p1[0] = 3
 p1[1] = 4
 p2[0] = 3
 p2[1] = 4
Run Code Online (Sandbox Code Playgroud)

由于a是在堆栈上分配的,因此在调用返回时内存不会保持分配状态,并且可能被其他内容重用.在这种情况下,由于foo(3)在foo(2)之后立即在相同的调用深度处被调用(即它们使用相同的堆栈空间),因此它们都将返回相同的指针 - 即p1等于p.

我不明白上面的解释.它到底意味着什么?为什么我们对p2和p1有完全相同的值?我知道你不能在C中返回指向局部变量的指针.但我不明白为什么p2和p1具有相同的值....

c

3
推荐指数
2
解决办法
743
查看次数

Python(Pandas)错误'标签[阿尔及利亚]不在[索引]中

我不明白为什么会这样

df[(df['Gold']>0) & (df['Gold.1']>0)].loc[((df['Gold'] - df['Gold.1'])/(df['Gold'])).abs().idxmax()]
Run Code Online (Sandbox Code Playgroud)

但是当我分开时(df['Gold'] + df['Gold.1'] + df['Gold.2']) 它停止工作给我错误,你可以在下面找到.

有趣的是,以下行有效

df.loc[((df['Gold'] - df['Gold.1'])/(df['Gold'] + df['Gold.1'] + df['Gold.2'])).abs().idxmax()]
Run Code Online (Sandbox Code Playgroud)

我不明白自从我开始学习Python和Pandas以来发生了什么.我需要了解发生这种情况的原因以及如何解决这个问题.

错误

KeyError:'标签[阿尔及利亚]不在[索引]中

DataFrame snap 在此输入图像描述

python indexing assign pandas

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

Python:UnboundLocalError:赋值前引用的局部变量'count'

我无法理解我的Python代码中的问题.它给了我以下错误:

    Traceback (most recent call last):
  File "main.py", line 77, in <module>
    main();
  File "main.py", line 67, in main
    count -= 1
UnboundLocalError: local variable 'count' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

这是代码的一部分

我定义了全局变量

count = 3
Run Code Online (Sandbox Code Playgroud)

然后我创建了方法main

def main():
    f = open(filename, 'r')

    if f != None:
        for line in f:

            #some code here

            count -= 1
            if count == 0: 
                break
Run Code Online (Sandbox Code Playgroud)

这可能有什么问题?

谢谢

python

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

使用C语言中的文件 - 给指针转换提供了不兼容的整数(代码来自C书)

我得到了非常愚蠢的错误,我不知道为什么它出现在我的代码中.我只是使用The C book中的代码,似乎没有什么特别的东西在这里...感谢您的帮助.

int main(int argc, const char * argv[])
{
    FILE *fp;    // Incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'
    fp = fopen(argv[1], 'r');

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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

numpy 中列表列表的平均值

我有一个循环,可以获取列表列表:

for i in range(num_exp):
  li = func()
Run Code Online (Sandbox Code Playgroud)

其中li是表单列表的列表 [["s1", 1, 2], ["s2", 2, 3], ["s3", 3, 4]] (第一项是字符串,其余 2 项是数字)

li我想在循环中对每个值进行平均。所以对于num_exp = 3和李的

[["s1", 1, 2], ["s2", 3, 4], ["s3", 5, 6]]
[["s1", 2, 3], ["s2", 4, 5], ["s3", 6, 7]]
[["s1", 3, 4], ["s2", 5, 6], ["s3", 7, 8]]
Run Code Online (Sandbox Code Playgroud)

我会得到

[["s1", 6/3, 9/3], ["s2", 12/3, 15/3], ["s3", 18/3, 21/3]]
Run Code Online (Sandbox Code Playgroud)

我想用 numpy 来做。在简单的Python中我做如下

 dic = {}
 for l in li:
     if l[0] not in …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

在numpy中计算没有循环的矩阵范数

如何计算 (100, 8, 8) 矩阵内的矩阵范数,以便最后有 100 个范数列表向量?例如,我想要每个 8x8 矩阵的范数。

现在我这样做,但它可能太低效和丑陋

norms = []
for m in mats:
    norms.append(np.linalg.norm(m, ord='fro'))
Run Code Online (Sandbox Code Playgroud)

python numpy

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

整数结构成员在函数结尾处的值为3440,无论如何赋值1.为什么?

我很困惑,在调试代码时,我面对的是一些奇怪的值3440,用于我的int结构成员.例如,这里有一个功能

struct Node
{
    int ptrCounter;
    void *value;
    struct Node *next;
};

typedef struct Node *Node;

struct SL
{
    Node front;
    CompareFunction compare;
    DestroyFunction destroy;

};

typedef struct SL* SLPtr;


SLPtr SLCreate(CompareFunction cf, DestroyFunction df)
{
    SLPtr slp = (SLPtr)calloc(1, sizeof(SLPtr));
    Node frontNode = (Node)calloc(1, sizeof(Node));
    frontNode -> ptrCounter = 1;
    frontNode -> value = NULL;
    frontNode -> next = NULL;

    slp -> front = frontNode;
    slp -> compare = cf;
    slp -> destroy = df;

    return slp;
}
Run Code Online (Sandbox Code Playgroud)

当我站在断点处(返回slp;)时,我看到我的(frontNode …

c

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

ax.locator_params(nbins=k) 在 matplotlib 中不起作用

我有这段简单的代码,我尝试在限制 x 刻度数的同时绘制简单的图形。有数百个变量iters,如果将它们绘制出来,只会创建一条粗黑线。但是,ax.locator_params不起作用,并且蜱虫的数量也没有减少。我尝试将其设置在plt对象上,但没有帮助。我还尝试在 locator_params 中指定xy轴,但也没有帮助。最后,我尝试了ax.locator_params前后移动ax.plot,但似乎没有任何帮助。我完全没有主意了。

fig, ax = plt.subplots(1, 1, figsize=(20,10))
ax.locator_params(tight=True, nbins=4)
ax.plot(iters, vals)
plt.xticks(rotation=30)
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

当我操作值超过2 ^ 15 - 1的int值时,为什么我没有溢出?

所以这就是问题:INT_MAX被定义为2 ^ 15 - 1.据我所知,如果我们操作超过32767的值,我们应该得到溢出.但为什么我这样做会得到正确答案

int r = 32767 + 10000;
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果!怎么不造成溢出?什么是int和double的最大数量,如果你超越它就会出现溢出.

  • 我正在使用C进行测试

谢谢!

c overflow

-2
推荐指数
2
解决办法
104
查看次数

标签 统计

c ×5

python ×5

numpy ×2

assign ×1

indexing ×1

matplotlib ×1

overflow ×1

pandas ×1

struct ×1