Pio*_* K. 1 c++ arrays char output
有人可以解释为什么我得到这个奇怪的输出?
为什么arr[b]每次只输出一个?
123.in
2
QWERT
YUIOP
ASDFG
HJKLZ
XCVBN
QWERT
YUIOP
ASDFG
HJKLZ
XCVBN
Run Code Online (Sandbox Code Playgroud)
Main.cpp的
int main() {
int n;
char arr[5][5];
ifstream source;
source.open("123.in");
source >> n;
for(int i=0; i<=n; i++) {
for(int r=0; r<5; r++){
source >> arr[r];
cout << arr[r] << endl;
}
for(int b=0; b<5; b++)
cout << " WHY: " << arr[b]<< endl;
}
source.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产量
QWERT
YUIOP
ASDFG
HJKLZ
XCVBN
WHY: QWERTYUIOPASDFGHJKLZXCVBN
WHY: YUIOPASDFGHJKLZXCVBN
WHY: ASDFGHJKLZXCVBN
WHY: HJKLZXCVBN
WHY: XCVBN
Run Code Online (Sandbox Code Playgroud)
为什么cout << arr[r] << endl;和cout << " WHY: " << arr[b]<< endl;不输出相同的代码?
您的数据存储如下:
ARR:
[0][0] [0][1] [0][2] [0][3] [0][4] [1][0] [1][2] [1][3] [1][4] [2][0] [2][1] [2][2] [2][3] [2][4] [3][0] [3][1] [3][2] [3][3] [3][4] [4][0] [4][1] [4][2] [4][3] [4][4] [][]
Q | W | E | R | T | Y | U | I | O | P | A | S | D | F | G | H | J | K | L | Z | X | C | V | B | N
Run Code Online (Sandbox Code Playgroud)
当你说你想要的时候
cout << arr[3];
Run Code Online (Sandbox Code Playgroud)
这意味着开始在"arr [3] [0]"显示我的内容并继续直到你点击NULL字符."arr [number]"实际上是指向另一个数组的指针.因为所有的数组都是同时初始化的(char arr [5] [5];)它将数组放回到内存中.
例如,如果你这样做:
cout << arr[0][7] << endl;
Run Code Online (Sandbox Code Playgroud)
你将得到"I"作为输出,因为它从"arr"指针开始计数7,该指针从[0] [0]开始,恰好落在"I"上
〜根据要求编辑:
请注意,当您使用指针(c ++中的数组确实是这样)时,很容易忽略终止数组的'\ 0'字符.在你的例子中,你很幸运,下一个字符是NULL,但情况并非总是这样.字符串可以继续显示存储在内存中的随机字符,直到它出现在NULL字符上.最佳实践涉及跟踪阵列的大小,以确保不会发生无意的结果.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |