【发布时间】:2011-05-13 09:07:57
【问题描述】:
我一直用 Java 编程,这可能是我对此感到如此困惑的原因:
在 Java 中我声明了一个指针:
int[] array
并对其进行初始化或分配一些内存:
int[] array = {0,1,0}
int[] array = new int[3]
现在,在 C 中,一切都变得如此混乱。一开始我以为就这么简单:
int array[]
并对其进行初始化或分配一些内存:
int array[] = {0,1,0}
int array[] = malloc(3*sizeof(int))
int array[] = calloc(3,sizeof(int))
除非我错了,以上都是等价的Java-C,对吧?
然后,今天我遇到了一个代码,其中我发现了以下内容:
pthread_t tid[MAX_OPS];
以及下面的一些行,没有任何初始化......
pthread_create(&tid[0],NULL,mou_usuari,(void *) 0);
令人惊讶的是(至少对我而言),代码有效!至少在 Java 中,这会返回一个不错的“NullPointerException”!
所以,按顺序:
我对所有 Java-C“翻译”都正确吗?
为什么该代码有效?
使用
malloc(n*sizeof(int))和calloc(n,sizeof(int))有什么区别吗?
提前致谢
【问题讨论】: