将限制合格的指针传递给函数?
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
除了 x
和 y
之外,您的函数不执行任何读取或写入操作,因此 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 读取的。
如果这是对的,那么当输入指针被restrict限定时,如何调用函数呢?似乎该函数在不违反限制规则的情况下无法执行任何操作。
释放限制指针是不是又一次违规?我猜这是一种修改。
提前致谢!
您的代码是正确的。当 SumAndFree
调用 agSum
时,它传递一个派生自 y
的指针。所以 SumAndFree
块下的所有访问都是使用从 y
.
也可以叫free
除了 x
和 y
之外,您的函数不执行任何读取或写入操作,因此 restrict
在这种情况下实际上没有任何作用。