我的老师在课堂上用这个函数作为例子,但我不在场。有人可以帮助我,只是解释它的作用吗?
My teacher used this function as an example in class, but I wasn't there for it. Can someone help me, just explain what it does?
void reverse(char *s, int n) {
char *first = &s[0];
char *last = &s[n-1];
int k = 0;
while(first < last){
char temp = *first;
*first++ = *last;
*last-- = temp;
k++;
}
}
它应该演示如何使用指针、寻址、取消引用、递增和递减来访问值和地址。
我能说出几行是怎么做的,但不幸的是,我在示例之后到达,我错过了它,这很糟糕,因为讲座是基于这个示例的,所以我现在有点迷路了。提前感谢!今天一整天,我都在为这件事烦恼。
遍历代码:
void reverse(char *s, int n) {
声明了一个名为reverse
的函数,不返回任何值,并接受char*
和int
作为参数。根据名称,我们应该期望此函数反转字符串s
的内容,其中s
的长度为n
。
char *first = &s[0];
first
现在指向字符串s
中的第一个字符。
char *last = &s[n-1];
last
现在指向字符串s
中的最后一个字符。
int k = 0;
while(first < last){
初始化计数器CCD_ 11并开始循环。只要存储在first
中的地址小于存储在last
中的地址,就会执行while
主体。
char temp = *first;
*first++ = *last;
*last-- = temp;
暂时忽略增量和减量。此代码只是交换字符*first
和*last
。first
最初指向字符串中的第一个字符,last
指向最后一个字符,因此这将交换这些值。
除了交换之外,后缀递增操作first++
将递增first
,使其指向字符串中的下一个字符,而last--
将最后递减,使其指字符串中的上一个字符。当first
和last
彼此相遇时,while
条件将为假,循环将停止。
语句*first++
中的求值顺序可能有点棘手。它相当于*(first++)
。递增后的++
具有更高的优先级,因此first
会递增,但其先前的位置会作为子表达式的结果返回。然后,该旧位置被取消引用,以获得字符串中的相应字符。您可以将其视为取消引用first
和,然后递增其地址,尽管从技术上讲,首先评估++
。
最后,
k++;
只是使计数器CCD_ 31递增。k
从未在这个函数中使用过,所以我不确定它在这里的用途是什么。
然后循环再次开始,依此类推,直到first >= last
。
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 未在作用域中声明unordered_map
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 需要帮助设置在C++中使用的Potrace
- C++为什么尽管我调用了void函数,它却不起作用
- 在指针的帮助下,文本文件中单词的频率
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 有没有一种方法可以在编译时获得作用域类名
- 我需要帮助理解以下代码的作用
- 我的老师在课堂上用这个函数作为例子,但我不在场。有人可以帮助我,只是解释它的作用吗?
- 需要帮助了解此功能的作用
- 请帮助我理解为什么SFINAE在这种情况下不起作用
- C++帮助!程序不起作用
- 上层到下部不起作用,帮助我的代码出了什么问题
- 有人可以帮助我弄清楚为什么我的 Do/While 循环不起作用吗?(C++)
- 需要帮助无法弄清楚为什么我的头文件函数声明不起作用
- 需要帮助 #include 似乎不起作用
- 作用域,操作符,函数错误需要帮助