2014-10-22 58 views
-3
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函数中的字符串不需要'*'infront?我也得到了temp = *(字符串+我)的错误,但它工作时,我把char temp = ...。我认为temp可以在for循环中工作,而不需要放入infront类型,因为我已经在reverse_string函数中声明了它,但是它没有。C中的反向字符串函数

+0

您似乎完全困惑什么类型,类型的值是什么,以及对特定类型的值返回的操作(类型和值)。无论如何,它应该是C还是C++?请添加其中一个主标签。 – Deduplicator 2014-10-22 01:51:43

+0

你需要明白什么'*'意味着首先。 – 2014-10-22 01:51:53

+1

从任何C教程/书开始。 [tag-wiki](https://stackoverflow.com/tags/c/info)和[book list](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-和列表)是很好的起点。顺便说一句:这个网站不适合辅导。 – Deduplicator 2014-10-22 01:54:41

回答

0

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

C还支持指针算术,在这里你可以通过加入或减去指针来抵消指针,就像你会int。结果将是一个指针偏移它所指向的类型的大小乘以数字偏移量。 string + i给你一个指向string指向的第i个字符的指针;因此*(string + i)是一个字符,而不是一个指针,因为您正在引用一个指向char的指针。所以,你不希望temp是一个指针,所以删除它的声明中的*。

+0

谢谢你的解释! – Drift117 2014-10-22 02:05:09

+0

@Trey他们从来没有声称已经低估了你的答案。 – 2014-10-22 02:06:52