将限定的限定指针传递给函数?

时间:2016-03-31 02:36:24

标签: c pointers restrict-qualifier

限制合格的指针被解释为有一个规则:指针访问并在任何地方修改的任何对象只能由指针访问。所以以下方法不起作用,对吧?

void agSum( int * restrict x, int n ){
   for(int i=0; i<n-1; i++) x[i+1] += x[i];
}

int SumAndFree( int * restrict y, int n ){
    agSum(y);
    printf("%i",y[n-1]);
    free(y);
}

所以,我猜这是无效的,因为y [n-1]被修改到某个地方,不能直接从限制指针y访问,而是由y读取。

如果这是正确的,当输入指针限制合格时,如何调用函数?似乎该功能在不违反限制规则的情况下无法做任何事情。

释放限制指针是否是另一种违规行为?我想这是一种修改。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您的代码是正确的。当SumAndFree调用agSum时,它会传递从y派生的指针。所以SumAndFree主体块下的所有访问都是使用从y派生的指针完成的。

也可以拨打free

除了xy之外,您的函数不会执行任何读写操作,因此在这种情况下,restrict实际上没有用处。