void reverse_string( char * string )
{
// Insert your code here
int i;
int length = strlen(string);
char* temp; // string is a pointer, so temp must be a pointer as well.
for(i=0; i<= length/2 ; i++)
{
temp = *(string +i);
*(string +i) = *(string + length-(1*i));
*(string + length-(1*i))= temp;
}
}
为什么在strlen函数中的那个字符串不需要前面的'*'?我也遇到temp = *(string + i)的错误,但是当我把char temp = ...时,它可以工作。我以为temp可以在for循环中工作而无需将类型放在前面,因为我已经在reverse_string函数中声明了它,但事实并非如此。
*ptr
称为解引用指针;它等于指向的值ptr
。在C语言中,我们通过指向该字符串中第一个字符的指针来访问字符串。这就是为什么字符串以null终止的原因,因为您实际上只知道字符串在内存中的起始位置。您只是将指针传递到strlen
,*string
而是传递了字符串中的第一个字符。
C还支持指针算术,您可以像通过int一样通过对其进行加减运算来偏移指针。结果将是指针偏移量乘以它指向的类型的大小再乘以数字偏移量。string + i
给您一个指向第i个字符的指针,该指针位于所指向的字符之后string
;因此*(string + i)
是字符,而不是指针,因为您要取消引用char的指针。因此,您不想temp
成为指针,因此请删除其声明中的*。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句