[英]Confused about pointers and passing them as arguments
我正在尝试创建一个任意大小的数组,由于某种原因,这里的代码有效:
int rand_tab(unsigned int n, int min, int max, int** dest){
if(!(*dest = malloc(sizeof(int)*n))) return 0;
return 1;
}
使用main中的随机数生成:
int* tab;
if(!(rand_tab(taille, min, max, &tab))) return -1;
for(i=0; i<taille; i++) tab[i] = random(min, max);
但这崩溃了(尽管编译得很好):
int rand_tab(unsigned int n, int min, int max, int** dest){
if(!(*dest = malloc(sizeof(int)*n))) return 0;
for(i=0; i<n; i++) *dest[i] = random(min, max);
return 1;
}
因为我传递&tab
到函数, dest
现在指向tab
,意思是*dest[i]
应该等同于在main中编写tab[i]
。
如果我用*dest[i]
*(*dest+i)
替换*dest[i]
它可以工作。 这里发生了什么?
问题是以下表达式
*dest[i] = random(min, max)
需要围绕*dest
括号:
(*dest)[i] = random(min, max)
由于方括号[]
运算符的优先级高于取消引用运算符*
,因此需要强制使用括号来匹配所需的顺序。 否则,C将dest
解释为指针数组,从dest+1
读取一个值(未定义的行为)并尝试取消引用它(未定义的行为)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.