假设有这样的功能
int foo(char ** str,int x){ char * p = * str + x;
foo2的(安培; P); //声明为int foo2(char **);}(过于简单,当然,真正的功能是…
(*str + x) 不是左值,因为它是一个没有地址的临时值,所以你不能使用它的地址 & 。即使编译器将值存储在RAM中的临时变量中,也可以采用其地址,如果foo2()修改了temporay变量的内容,您将如何引用其值。
(*str + x)
&
因此,您需要自己将值存储在临时变量中。
如果要将指针传递给指向特定char的指针
foo2(&(char *){&(*str)[x]});
要么
我认为以下代码是您要做的。对于踢,我把它递归并用字母表测试它的字符串。变量cnt和lmt需要是全局的。如果你运行它会显示一个缩小的字符串。一定要保持p和lmt足够小,不要溢出字符串。
void foo(char *s, int p) { cnt++; printf("%s\n", s); if(cnt != lmt) foo(&s[p], p); }