小编Chr*_*per的帖子

多维数组如何在内存中格式化?

在C中,我知道我可以使用以下代码在堆上动态分配二维数组:

int** someNumbers = malloc(arrayRows*sizeof(int*));

for (i = 0; i < arrayRows; i++) {
    someNumbers[i] = malloc(arrayColumns*sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

显然,这实际上会创建一个指向一堆独立的一维整数数组的指针的一维数组,而"系统"可以在我要求时找出我的意思:

someNumbers[4][2];
Run Code Online (Sandbox Code Playgroud)

但是,当我静态声明一个2D数组时,如下一行...:

int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS];
Run Code Online (Sandbox Code Playgroud)

...是否在堆栈上创建了类似的结构,还是完全是另一种形式?(即它是指针的一维数组吗?如果没有,它是什么,以及如何计算它的引用?)

另外,当我说"系统"时,究竟是什么负责解决这个问题呢?内核?或者C编译器在编译时对其进行排序?

c memory arrays stack-memory data-structures

165
推荐指数
4
解决办法
7万
查看次数

"for(;;)"比"while(TRUE)"快吗?如果没有,为什么人们会使用它?

for (;;) {
    //Something to be done repeatedly
}
Run Code Online (Sandbox Code Playgroud)

我已经看到这种东西使用了很多,但我觉得它很奇怪......说再说清楚while(true),还是沿着这些方向做些什么?

我猜这(因为许多程序员采用神秘的代码的原因)这是一个微小的利润更快?

为什么,它真的值得吗?如果是这样,为什么不这样定义它:

#define while(true) for(;;)
Run Code Online (Sandbox Code Playgroud)

另请参见:哪个更快:while(1)或while(2)?

c c++ optimization readability infinite-loop

160
推荐指数
17
解决办法
4万
查看次数

字符串文字:它们去哪儿了?

我对字符串文字的分配/存储感兴趣.

我确实在这里找到了一个有趣的答案,说:

定义内联字符串实际上是将数据嵌入程序本身并且无法更改(某些编译器通过智能技巧允许这样做,不要打扰).

但是,它与C++有关,更不用说它不打扰了.

我很烦.= d

所以我的问题是我的字符串文字保存在哪里以及如何保存?我为什么不试着改变呢?实施是否因平台而异?有没有人愿意详细说明"聪明的伎俩"?

c memory string-literals

155
推荐指数
6
解决办法
7万
查看次数

如果没有"std",你能用C做什么包括?它们是"C"的一部分还是仅仅是图书馆?

如果这是一个主观或重复的问题,我道歉.搜索有点尴尬,所以我不确定要包含哪些术语.

我想知道的是当你不包括像stdio和的标准库时,C语言中的基础工具/功能是什么stdlib.

如果没有printf(),我该怎么办fopen()

另外,这些库在技术上是"C"语言的一部分,还是只是非常有用且有效的基本库?

c standards

46
推荐指数
4
解决办法
7523
查看次数

如果free()知道我的数组的长度,为什么我不能在我自己的代码中要求它?

我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:

void initializeAndFree(int* anArray, size_t length);

int main(){
    size_t arrayLength = 0;
    scanf("%d", &arrayLength);
    int* myArray = (int*)malloc(sizeof(int)*arrayLength);

    initializeAndFree(myArray, arrayLength);
}

void initializeAndFree(int* anArray, size_t length){
    int i = 0;
    for (i = 0; i < length; i++) {
        anArray[i] = 0;
    }
    free(anArray);
}
Run Code Online (Sandbox Code Playgroud)

但是如果我无法从指针中获取已分配内存的长度,那么free()当我提供的内容完全相同时,"自动"知道如何解除分配?作为一名C程序员,为什么我不能进入魔术?

从哪里free()获得免费(har-har)知识?

c memory malloc free

44
推荐指数
4
解决办法
5281
查看次数

objective-c和java之间的区别

我对Java很有经验,想学习objective-c来为iPhone编写应用程序.有什么根本区别?(语法除外)

java objective-c

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

<< =和| =的含义

在C 中<<=和是什么意思|=

我认识到<<是bithift等,但我不知道这些是什么组合.

c operators bit-shift logical-operators semantics

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

如何在python中激活pyvenv vitrualenv?(activate_this.py已被删除?)

我正在使用Python 3.4,并创建了pyvenv,我希望在python进程中激活它.使用virtualenv,我曾经使用过activate_this.py,但这似乎在pyvenv中消失了.

现在有一种简单的方法可以有效地将当前的解释器更改为virtualenv解释器吗?我可能会搞乱PATH(这就是做了什么activate_this.py),但我想要一种更简单,更稳定的方式.

这适用于wsgi.py.

mod-wsgi python-3.x

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

Java EE中的Facade有什么意义?

我真的不明白外立面的意义.

public abstract class AbstractFacade<T> {

    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0]); …
Run Code Online (Sandbox Code Playgroud)

java design-patterns ejb facade java-ee

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

Cocoa Autolayout - 为什么我不能删除或修改文本字段上的(紫色)宽度约束?

我正在使用autolayout构建一个简单的应用程序,我遇到了一个奇怪的情况.我将文本字段放在大型开放视图的空白部分中,这样除了超级视图之外不会受到任何影响,但是当我尝试将"宽度"约束修改为> =而不是==时,它会创建一个新约束并拒绝修改旧的.我无法删除它,或更改其任何属性,因为它只是创建一个新属性.

这是两个约束的比较,紫色的是顽固的,蓝色的是新创造的约束.

约束比较

为什么紫色圆形不可修改?

layout cocoa interface-builder osx-lion

17
推荐指数
3
解决办法
8941
查看次数