我有一个使用指针算法的函数来打印出char *:
中的所有字符void printCharArray(char* c,int n)
{
for (char*p=c+n-1; n; n--)
cout << *p--;
}
上面的代码有效,但我想尝试另一种不起作用的方法:
void printCharArray(char* c,int n)
{
char *p = &c [n - 1];
for (int i = 0; i < n; i++)
cout << *--p;
}
奇怪的是,如果我将char *p = &c [n - 1];
更改为char *p = &c [n];
然后它正在工作,但我希望&c [n - 1]
等于char数组中的最后一个字符但不是&c[n]
?
答案 0 :(得分:1)
--p;
相当于p = p - 1; p;
p--;
相当于auto tmp = p; p = p - 1; tmp
换句话说
void printCharArray(char* c,int n)
{
for (char*p=c+n-1; n; n--)
cout << *p--;
}
这将显示*p
,*(p - 1)
,...,*(p - n)
void printCharArray(char* c,int n)
{
char *p = &c [n - 1];
for (int i = 0; i < n; i++)
cout << *--p;
}
这将显示*(p - 1)
,*(p - 2)
,...,*(p - (n+1))