繁体   English   中英

对指针感到困惑并将它们作为参数传递

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM