C中的反向字符串函数

时间:2014-10-22 01:47:50

标签: c string reverse

 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函数中声明了它,但它并没有。

1 个答案:

答案 0 :(得分:0)

*ptr被称为取消引用指针;它相当于值ptr指向的值。 在C中,我们通过指向该字符串中第一个字符的指针来访问字符串。这就是字符串以空值终止的原因,因为您实际上只知道字符串在内存中的起始位置。您只需将指针传递给strlen*string就会传递字符串中的第一个字符。

C还支持指针运算,你可以通过像int那样添加或减去指针来偏移指针。结果将是指针偏移它指向的类型的大小乘以数字偏移量。string + i为您提供指向string指向的第i个字符的指针;因此,*(string + i)是一个字符,而不是一个指针,因为您正在取消引用指向char的指针。因此,您不希望temp成为指针,因此请在其声明中删除*。