Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的老师在课堂上用这个函数作为例子,但我不是;我不知道该怎么办。有人能帮我解释一下它的作用吗? void反向(字符*s,整数n){ char*first=&s[0]; char*last=&s[n-1]; int k=0; while(第一次=last我相信如果你向老师提出这个问题,老师会很乐意帮助你。然后返回并请老师向你解释。如果它没有反转,我会对命名惯例感到有点不安。逐行逐行地检查。绘制一张图表,用方框表示内存位置,用箭头表示指向这些位置的指针,并在逐步完成代码时跟踪所有值。或者在调试器中运行它并做同样的事情。去听讲座是个好主意!!此外,我认为这不是C++,这是C。因此,如果我有这个权利,它只是颠倒,因为它迭代通过一个字符串,所以,例如,如果字符串是“Hello World”,它将是“OLLH DLROW”?但是它是用指针和地址来做的?嗯,“dlrow olleH”但是是的。啊,非常感谢!这个解释很有帮助。不过,我还是会听从你的建议,自己去看,这样我才能理解。再次感谢!_C++ - Fatal编程技术网

我的老师在课堂上用这个函数作为例子,但我不是;我不知道该怎么办。有人能帮我解释一下它的作用吗? void反向(字符*s,整数n){ char*first=&s[0]; char*last=&s[n-1]; int k=0; while(第一次=last我相信如果你向老师提出这个问题,老师会很乐意帮助你。然后返回并请老师向你解释。如果它没有反转,我会对命名惯例感到有点不安。逐行逐行地检查。绘制一张图表,用方框表示内存位置,用箭头表示指向这些位置的指针,并在逐步完成代码时跟踪所有值。或者在调试器中运行它并做同样的事情。去听讲座是个好主意!!此外,我认为这不是C++,这是C。因此,如果我有这个权利,它只是颠倒,因为它迭代通过一个字符串,所以,例如,如果字符串是“Hello World”,它将是“OLLH DLROW”?但是它是用指针和地址来做的?嗯,“dlrow olleH”但是是的。啊,非常感谢!这个解释很有帮助。不过,我还是会听从你的建议,自己去看,这样我才能理解。再次感谢!

我的老师在课堂上用这个函数作为例子,但我不是;我不知道该怎么办。有人能帮我解释一下它的作用吗? void反向(字符*s,整数n){ char*first=&s[0]; char*last=&s[n-1]; int k=0; while(第一次=last我相信如果你向老师提出这个问题,老师会很乐意帮助你。然后返回并请老师向你解释。如果它没有反转,我会对命名惯例感到有点不安。逐行逐行地检查。绘制一张图表,用方框表示内存位置,用箭头表示指向这些位置的指针,并在逐步完成代码时跟踪所有值。或者在调试器中运行它并做同样的事情。去听讲座是个好主意!!此外,我认为这不是C++,这是C。因此,如果我有这个权利,它只是颠倒,因为它迭代通过一个字符串,所以,例如,如果字符串是“Hello World”,它将是“OLLH DLROW”?但是它是用指针和地址来做的?嗯,“dlrow olleH”但是是的。啊,非常感谢!这个解释很有帮助。不过,我还是会听从你的建议,自己去看,这样我才能理解。再次感谢!,c++,C++,它应该演示如何使用指针、寻址、解引用、递增和递减来访问值和地址 我能说出几行是怎么做的,但不幸的是,当我在示例之后到达时,我错过了它,这很糟糕,因为讲座是基于这个示例的,所以我现在有点迷路了。提前谢谢!今天一整天我都在为这件事发愁 浏览代码: void reverse(char *s, int n) { char *first = &s[0]; char *last = &s[n-1]; int k = 0; while(first < l

它应该演示如何使用指针、寻址、解引用、递增和递减来访问值和地址

我能说出几行是怎么做的,但不幸的是,当我在示例之后到达时,我错过了它,这很糟糕,因为讲座是基于这个示例的,所以我现在有点迷路了。提前谢谢!今天一整天我都在为这件事发愁

浏览代码:

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++;
    }
}
声明名为
reverse
的函数,不返回任何值,并接受
char*
int
作为参数。从名称来看,我们应该期望此函数反转字符串
s
的内容,其中
s
具有长度
n

void reverse(char *s, int n) {
first
现在指向字符串
s
中的第一个字符

    char *first = &s[0];
    char *last = &s[n-1];
last
现在指向字符串
s
中的最后一个字符

    char *first = &s[0];
    char *last = &s[n-1];
暂时忽略递增和递减。此代码只是交换字符
*first
*last
first
最初指向字符串中的第一个字符,
last
指向最后一个字符,因此这将交换这些值

除了交换,后缀递增操作
first++
将递增
first
,以指向字符串中的下一个字符,
last--
将递减,以指向字符串中的上一个字符。当
first
last
相遇时,
while
条件将为false,循环将停止

语句
*first++
中的求值顺序可能有点棘手。它相当于
*(first++)
。增量后的
++
具有更高的优先级,因此将增量后的
第一个
,但其先前位置将作为子表达式的结果返回。然后取消对该旧位置的引用,以获取字符串中的对应字符。您可以将其视为先取消引用
,然后增加其地址,尽管从技术上讲,首先计算
++

最后,

        char temp = *first;
        *first++ = *last;
        *last-- = temp;
只需增加计数器
k
k
从未在该函数中使用,因此我不确定它的用途


然后循环再次开始,依此类推,直到
first>=last

我相信如果你向老师提出这个问题,老师会很乐意帮助你。然后返回并请老师向你解释。如果它没有反转,我会对命名惯例感到有点不安。逐行逐行地检查。绘制一张图表,用方框表示内存位置,用箭头表示指向这些位置的指针,并在逐步完成代码时跟踪所有值。或者在调试器中运行它并做同样的事情。去听讲座是个好主意!!此外,我认为这不是C++,这是C。因此,如果我有这个权利,它只是颠倒,因为它迭代通过一个字符串,所以,例如,如果字符串是“Hello World”,它将是“OLLH DLROW”?但是它是用指针和地址来做的?嗯,“dlrow olleH”但是是的。啊,非常感谢!这个解释很有帮助。不过,我还是会听从你的建议,自己去看,这样我才能理解。再次感谢!