任何人都可以向我解释为什么我不能打印出数组值? 我开始学习C++代码,我不明白为什么我不能打印出[j] [i]的值,任何人都可以教我解释?THX~ #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] : %d\n", name[j], i, name[j][i]); } } return 0; } #包括 #包括 使用名称空间std; 无效数组_拷贝(int*p,int*q){ 对于(inti=0;i

任何人都可以向我解释为什么我不能打印出数组值? 我开始学习C++代码,我不明白为什么我不能打印出[j] [i]的值,任何人都可以教我解释?THX~ #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] : %d\n", name[j], i, name[j][i]); } } return 0; } #包括 #包括 使用名称空间std; 无效数组_拷贝(int*p,int*q){ 对于(inti=0;i,c++,arrays,C++,Arrays,此处name不是二维数组。你做错了 你可以这样做 printf("%c[%d] : %d\n", name[j], i, name[j]=='a'?a[i]:b[i]); 或 为了解释第二个问题,我们在数组pp中存储指向数组第一个元素的指针。然后我们根据name[j]中的字符打印它 当name[j]为a时,我们访问pp位置0或name[j]-'a'处的数组,对于b我们访问索引1(参见这等于b-a)1 (一) 现在a和b的ascii值是连续的。因此,我们将从a中获得正确的偏移量-这就是索引中使用

此处
name
不是二维数组。你做错了

你可以这样做

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

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

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

(一) 现在
a
b
的ascii值是连续的。因此,我们将从
a
中获得正确的偏移量-这就是索引中使用的内容。
名称不是二维数组。可以创建二维数组并添加如下值:

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];
        }
    }
}
char name[2][10]={0};
对于(int i=0;i<2;i++){
对于(int a=0;a<10;a++){
如果(i==0){
姓名[i][a]=a[i];
}
否则{
姓名[i][a]=b[i];
}
}
}
coderredoc所说的是一种更优雅的方式来完成你想要做的事情。然而,如果你在课堂上,还没有学会他使用的概念,你的教授可能不会接受这一有效答案


侧边栏:如果你在上课,有一些事情是值得注意的:

我明白了,非常感谢。好的,解释清楚。再次感谢。使用cout,而不是printf。这不是问题所在,但前两个循环非常混乱。将循环中的控件与循环执行的操作分开。第一个应该是
for(inti=0;i<10;i++)*q++=*p++
int *pp[2]={a,b};
printf("%c[%d] : %d\n", name[j], i, pp[name[j]-'a'][i]);
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];
        }
    }
}