任何人都可以向我解释为什么我不能打印出数组值

Anyone can explain to me why i cannot printf out the array value?

本文关键字:打印 数组 不能 为什么 可以向 解释 任何人      更新时间:2023-10-16

我开始学习C++代码,我不明白为什么我不能打印出name[j][i]值,任何人都可以教我并向我解释?感谢~

#include <iostream>
#include <string>
using namespace std;
void array_copy(int *p, int *q){
  for (int i = 0; i < 10; *q++ = *p++, i++);
}
int main(){
  int a[10], b[10];
  for (int i = 0; i < 10; a[i] = i + 1, i++);
  array_copy(a, b);
  for (int i = 0; i < 10; i++) {
    char name[2] = {'a', 'b'};
    for (int j = 0; j < 2; j++) {
      printf("%c[%d] : %dn", name[j], i, name[j][i]);
    }
  }
  return 0;
}
name[j][i]

这里name不是二维数组。你做错了。

你可以这样做

printf("%c[%d] : %dn", name[j], i, name[j]=='a'?a[i]:b[i]);

int *pp[2]={a,b};
printf("%c[%d] : %dn", name[j], i, pp[name[j]-'a'][i]);

为了解释第二个,我们将指向数组第一个元素的指针存储在数组pp中。然后我们根据 name[j] 中的字符打印它。

name[j] a时,我们访问位于位置 0name[j]-'a' 的数组pp,对于b,我们访问索引 1(请参阅这等于 b - a (1

1(现在 ab 的 ascii 值是偶然的。因此,我们将从a中获得正确的 offser - 这就是索引中使用的内容。

名称不是二维数组。您可以创建一个 2d 数组并添加如下值:

char name[2][10] = { 0 };
for(int i = 0; i < 2; i++){
    for(int a = 0; a < 10; a++){
        if(i == 0){
            name[i][a] = a[i];
        }
        else{
            name[i][a] = b[i];
        }
    }
}

coderredoc 所说的是你尝试做的事情的一种更优雅的方式。但是,如果你在课堂上,并且没有学习他使用的概念,你的教授可能不会接受这是一个有效的答案。

边栏:如果你在上课,有一些东西可以持保留态度:https://www.youtube.com/watch?v=YnWhqhNdYyk