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函数中,字符串不需要&#39; *&#39;在前?我也收到了temp = *(string + i)的错误,但是当我把char temp = ...时它会起作用。我假设temp可以在for循环中工作而不会将类型置于前面,因为我已经在reverse_string函数中声明了它,但它并没有。
答案 0 :(得分:0)
*ptr
被称为取消引用指针;它相当于值ptr
指向的值。
在C中,我们通过指向该字符串中第一个字符的指针来访问字符串。这就是字符串以空值终止的原因,因为您实际上只知道字符串在内存中的起始位置。您只需将指针传递给strlen
,*string
就会传递字符串中的第一个字符。
C还支持指针运算,你可以通过像int那样添加或减去指针来偏移指针。结果将是指针偏移它指向的类型的大小乘以数字偏移量。string + i
为您提供指向string
指向的第i个字符的指针;因此,*(string + i)
是一个字符,而不是一个指针,因为您正在取消引用指向char的指针。因此,您不希望temp
成为指针,因此请在其声明中删除*。