我正在学习C,目前是指针。
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int f1(int **w){
for (int i=0;i<2;i++){
for (int j=0;j<10;j++){
w[i][j]=10;
printf("%d ",w[i][j]);
}
printf("\n");
}
printf("----\n");
}
int main () {
int **w = (int **) malloc(sizeof(int*)*2);
for (int i=0;i<2;i++)
w[i] = (int*)malloc(sizeof(int)*10);
for (int i=0;i<2;i++){
for (int j=0;j<10;j++){
w[i][j]=i*10 + j;
printf("%d ",w[i][j]);
}
printf("\n");
}
printf("---\n");
f1(w);
for (int i=0;i<2;i++){
for (int j=0;j<10;j++){
w[i][j]=i*10 + j;
printf("%d ",w[i][j]);
}
printf("\n");
}
return 0;
}
所以,我有这个代码
这是输出:
0 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19
---
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
----
0 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19
我想知道,为什么数组值(参见最后2行)与10?不同 我的猜测,不是发送正确的指针,但是,在这种情况下,WHERE存储的数组是10 ... 10 ?,它是否神奇地创建了?
谢谢
答案 0 :(得分:1)
似乎该程序完全按照您的编程要求执行。
f1函数将所有值设置为10
w[i][j]=10;
其他地方将其设置为
w[i][j]=i*10 + j;
答案 1 :(得分:0)
for (int i=0;i<2;i++){
for (int j=0;j<10;j++){
w[i][j]=i*10 + j;
printf("%d ",w[i][j]);
}
printf("\n");
}
您正在使用此行设置数组: w [i] [j] = i * 10 + j;
对于2个元素的数组,变量i为0或1,因此:
0*10 + 0 = 0...
0*10 + 9 = 9...
1*10 + 0 = 10...
1*10 + 9 = 19
这说明了最后一组中的整个输出范围。
答案 2 :(得分:0)
输出必须是错误的,
它应该是:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19