小编Tor*_*erg的帖子

如果分配了该区域,那么访问超出其结尾的数组是不确定的行为?

可能重复:
"struct hack"是技术上未定义的行为吗?

通常访问超出其结尾的数组是C中未定义的行为.例如:

int foo[1];
foo[5] = 1; //Undefined behavior
Run Code Online (Sandbox Code Playgroud)

如果我知道数组末尾之后的内存区域是用malloc还是在堆栈上分配的话,它仍然是未定义的行为吗?这是一个例子:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
  int len;
  int data[1];
} MyStruct;

int main(void)
{
  MyStruct *foo = malloc(sizeof(MyStruct) + sizeof(int) * 10);
  foo->data[5] = 1;
}
Run Code Online (Sandbox Code Playgroud)

我已经看到在几个地方使用这个模式来制作一个可变长度的结构,它似乎在实践中起作用.这是技术上未定义的行为吗?

c undefined-behavior

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

为什么git stash -p需要很长时间才能启动?

在我的回购,git diffgit stash这两个快速运行,在不到一秒钟。但是git stash -p,在显示第一个大块之前需要花费20秒钟。为什么会这样呢?

git git-stash

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

Pythonic方式从列表中获取唯一的项目

有时函数返回一个列表,但是你知道它只有一个项目.获得它的一种方法是

a = somefunc()[0]
Run Code Online (Sandbox Code Playgroud)

如果列表中有多个项目,则会以静默方式丢弃它们.

本文建议使用

(a,) = somefunc()
Run Code Online (Sandbox Code Playgroud)

评论建议只是

a, = somefunc()
Run Code Online (Sandbox Code Playgroud)

两者都具有以下优点:具有多个元素的数组给出了ValueError: too many values to unpack.它们还可以处理元组,集合和其他集合.

这些方法是否被认为是Pythonic或混淆?他们有任何缺点吗?

python

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

Eclipse CDT如何理解__SIZE_TYPE__?

当我size_t在Eclipse中打开声明时,我会stddef.h从GCC获得以下行: typedef __SIZE_TYPE__ size_t;

我知道它__SIZE_TYPE__没有在任何头文件中定义,但是编译器知道.

但是,Eclipse CDT如何理解__SIZE_TYPE__并且size_t是整数类型,因此它可以进行代码分析等?它是否内置于CDT中?

eclipse-cdt codan

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

我可以在C中将指针作为2D数组访问吗?

让我们说我有一个指向int的指针:

int *p = somefunc();
Run Code Online (Sandbox Code Playgroud)

我知道它指向25个整数,逻辑上排列在5x5网格中.我可以使用以下方法访问元素:

p[y*5+x]
Run Code Online (Sandbox Code Playgroud)

或这个:

*(p+y*5+x)
Run Code Online (Sandbox Code Playgroud)

有没有办法将其作为2D阵列访问?

a[y][x]
Run Code Online (Sandbox Code Playgroud)

c multidimensional-array

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