指针calloc函数是否返回指针向量?(C语言)
我试图理解c代码(SimpleScalar,bpred.c),有一件事让我很困惑:指针calloc函数是否返回指针向量?(C语言),c,pointers,calloc,C,Pointers,Calloc,我试图理解c代码(SimpleScalar,bpred.c),有一件事让我很困惑: int *shiftregs; shiftregs = calloc(1, sizeof(int)); int l1index, l2index; l1index = 0; l2index = shiftregs[l1index]; 我删除了一些可能没有帮助的代码。调用calloc后,*shiftregs变成指针数组?那么l2index的值是多少?非常感谢 由于移位符
int *shiftregs;
shiftregs = calloc(1, sizeof(int));
int l1index, l2index;
l1index = 0;
l2index = shiftregs[l1index];
我删除了一些可能没有帮助的代码。调用
calloc
后,*shiftregs
变成指针数组?那么l2index
的值是多少?非常感谢 由于移位符
是指向int
的指针,*移位符
是int
由于calloc
保证它分配的内存被设置为0
,并且您已经分配了足够的内存来引用shiftregs[0]
,l2index
将是0
(假设calloc
没有失败并返回NULL
)。calloc()
函数用于分配一个动态的零整数数组,该数组可以通过指针移位符来引用
除非分配失败(calloc()
返回NULL),否则l2index
中的值将为零。如果分配失败,则调用未定义的行为;任何事情都可能发生,但您的程序可能会崩溃。检查分配,使其不会崩溃 l2index
为0calloc
将内存设置为零。以下是Linux程序员手册:
calloc()为大小为的nmemb元素数组分配内存
每个字节返回一个指向已分配内存的指针。记忆
设置为零。如果nmemb或size为0,则calloc()返回
NULL或以后可以成功删除的唯一指针值
传递给free()
检查calloc()是否返回NULL。
如果是这样,“l2index=shiftregs[l1index];”将崩溃,因为您试图从空点(shiftregs)获取值。
如果不是,正如他们所说,l2index将为0 “指针向量”是什么意思?抱歉,我是说指针数组*shiftregs
是一个int
shiftregs
是指向int
的指针。int*
可能指向int
数组的第一个元素;shiftregs[#]是指位置中的内容?移位符是否成为int数组?否。您将移位符
定义为一个指针,并且无论您为其分配了什么,它仍然是一个指针。建议阅读:本报告第6节。