限制限定指针向我解释为有一个规则:任何由指针访问并在任何地方修改的对象只能由指针访问。那么下面的方法是行不通的,对吧?
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 读取。
如果这是正确的,那么当输入指针受到限制时,如何调用函数?看起来该函数在不违反限制规则的情况下无法执行任何操作。
释放限制指针是否又是一次违规?我想这是一种修改。
提前致谢!
你的代码是正确的。什么时候SumAndFree
calls agSum
,它传递一个派生的指针y
。所以该块下的所有访问SumAndFree
的主体是使用派生的指针完成的y
.
打电话就好free
too.
您的函数不执行任何读取或写入操作x
and y
, so restrict
实际上在这种情况下没有任何作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)