我正在学习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?
我猜,没有发送正确的指针,但是,在这种情况下,数组的存储位置是10...10?,它是神奇地创建的吗?
谢谢
发布于 2011-11-12 00:51:06
看起来这个程序正在做你想要做的事情。
f1函数将所有值设置为10
w[i][j]=10;其他地方将其设置为
w[i][j]=i*10 + j;发布于 2011-11-12 00:51:28
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");
}您正在使用以下行设置数组: wi=i*10 + j;
对于包含2个元素的数组,变量i要么为0,要么为1,因此:
0*10 + 0 = 0...
0*10 + 9 = 9...
1*10 + 0 = 10...
1*10 + 9 = 19这说明了最后一个集合中的所有输出范围。
发布于 2013-03-05 10:56:32
输出一定是错的,
应该是这样的:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19https://stackoverflow.com/questions/8097207
复制相似问题