3

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

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

如果这是正确的,当输入指针是限制条件时,你怎么能调用函数呢?似乎该功能在不违反限制规则的情况下无法执行任何操作。

释放限制指针是否又违反了规定?我猜这是一种修改。

提前致谢!

4

1 回答 1

1

你的代码是正确的。SumAndFree调用时agSum,它传递一个从y. 因此,在 的主体块下的所有访问SumAndFree都是使用派生自 的指针完成的y

打电话free也不错。

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

于 2016-03-31T03:47:36.410 回答