将restrict限定符指针传递给函数?

3

限定指针被解释为具有规则:只有通过指针访问并在任何地方修改的对象才能仅由该指针访问。所以下面的代码不起作用,对吗?

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读取。

如果这是正确的,那么当输入指针限定为restrict时,你如何调用函数呢?似乎函数无法做任何事情而不违反restrict规则。

释放限定指针是另一种违规行为吗?我想这有点像修改。

提前致谢!

1个回答

1
你的代码是正确的。当SumAndFree调用agSum时,它传递了一个指针,该指针源自y。因此,在SumAndFree主体块下的所有访问都是使用源自y的指针完成的。
调用free也可以。
你的函数除了xy之外,没有进行任何读写操作,因此在这种情况下,restrict实际上没有任何作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接