将限定的限制指针传递给函数?
限制合格的指针被解释为有一个规则:指针访问并在任何地方修改的任何对象只能由指针访问。 所以以下不起作用吧?
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读取。
如果这是正确的,当输入指针限制合格时,如何调用函数? 似乎该function在不违反限制规则的情况下无法执行任何操作。
释放限制指针是否是另一种违规行为? 我想这是一种修改。
提前致谢!
你的代码是正确的。 当SumAndFree
调用agSum
,它传递一个从y
派生的指针。 所以SumAndFree
主体块下的所有访问都是使用从y
派生的指针完成的。
也可以free
打电话。
除了x
和y
,你的函数不会进行任何读或写操作,因此在这种情况下, restrict
实际上没有任何用处。