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循环重复,它会成为新的"临时"吗?
在for循环中,有人可以解释硬件级别的情况.我理解'temp'被分配给一个字节,该字节被赋值给s [i]的值.
内存是否分配给所有内容?
是的,它被分配,但在堆栈上.您需要了解堆栈和堆之间的区别.
是的,所有变量都以某种形式的内存表示.但话又说回来,根据上下文,它可能是堆栈或堆.
等号,s [i]等?
Equals是一个操作符,用于通知编译器正在进行赋值操作,因此不需要内存.另一方面,s [i]是一个数组对象,表示在堆栈存储器中.
'镜像'值被发送到'temp'.但是之后这个临时值发生了什么,一旦for循环重复,它会成为新的"临时"吗?
因为,在循环中你宣称temp为,
char temp;
Run Code Online (Sandbox Code Playgroud)
每次迭代都会在堆栈中创建一个新的变量temp.
我强烈建议您阅读典型操作系统中的内存组织.您可以从这里开始基础知识.
编辑:还要注意,根据变量的范围,编译器会根据其范围自动为堆栈变量重新分配内存.对于上面的临时变量,其作用域在for循环结束时结束,因此在该点被销毁.因此,编译器最终不会为每次迭代分配内存的字符空间.