在硬件级别的"for循环"中发生了什么?是否自动分配内存?(C++)

Ber*_*cia 1 c++ memory arrays for-loop char

我在这里有一些代码可以反转一个字符数组:

#include <iostream>
#include <string>

using namespace std;

char s[50];

void reverseChar(char * s)
{
    for (int i=0; i<strlen(s)/2; ++i)
    {
        char temp = s[i];
        s[i] = s[strlen(s)-i-1];
        s[strlen(s)-i-1] = temp;
    }
}

int main() {
    cout << "Hello, this program reverses words." << endl << endl;
    cout << "Enter in a word, no spaces please:" << endl;
    cin.getline(s, 50);
    cout << "This is the word, it has now been reversed:" << endl;
    reverseChar(s);
    cout << s;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在for循环中,有人可以解释硬件级别的情况.我理解'temp'被分配给一个字节,该字节被赋值给s [i]的值.

内存是否分配给所有内容?

等号,s [i]等?

在将字节分配给s [i]中的值之后,将s [i]分配给数组s中的某个其他值.然后将此其他值分配给temp.

我无法理解所有这些字节的去向,以及它们如何被C++操纵.

我明白这一点:

s[i] = s[strlen(s)-i-1];
Run Code Online (Sandbox Code Playgroud)

占位符值是否正在交换?

在这一行:

s[strlen(s)-i-1] = temp;
Run Code Online (Sandbox Code Playgroud)

'复制'值被发送到'temp'.但是之后这个临时值发生了什么,一旦for循环重复,它会成为新的"临时"吗?

Bar*_*mar 5

在for循环中,有人可以解释硬件级别的情况.我理解'temp'被分配给一个字节,该字节被赋值给s [i]的值.

内存是否分配给所有内容?

是的,它被分配,但在堆栈上.您需要了解堆栈和堆之间的区别.

是的,所有变量都以某种形式的内存表示.但话又说回来,根据上下文,它可能是堆栈或堆.

等号,s [i]等?

Equals是一个操作符,用于通知编译器正在进行赋值操作,因此不需要内存.另一方面,s [i]是一个数组对象,表示在堆栈存储器中.

'镜像'值被发送到'temp'.但是之后这个临时值发生了什么,一旦for循环重复,它会成为新的"临时"吗?

因为,在循环中你宣称temp为,

char temp;
Run Code Online (Sandbox Code Playgroud)

每次迭代都会在堆栈中创建一个新的变量temp.

我强烈建议您阅读典型操作系统中的内存组织.您可以从这里开始基础知识.

编辑:还要注意,根据变量的范围,编译器会根据其范围自动为堆栈变量重新分配内存.对于上面的临时变量,其作用域在for循环结束时结束,因此在该点被销毁.因此,编译器最终不会为每次迭代分配内存的字符空间.