将限制合格的指针传递给函数?

Passing restrict qualified pointers to functions?

我向我解释了限制限定指针有一条规则:指针访问的任何对象和在任何地方修改的对象只能由指针访问。所以下面的不行吧?

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限定时,如何调用函数呢?似乎该函数在不违反限制规则的情况下无法执行任何操作。

释放限制指针是不是又一次违规?我猜这是一种修改。

提前致谢!

您的代码是正确的。当 SumAndFree 调用 agSum 时,它传递一个派生自 y 的指针。所以 SumAndFree 块下的所有访问都是使用从 y.

派生的指针完成的

也可以叫free

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