指向指针?

时间:2011-11-11 16:46:22

标签: c pointers

我正在学习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 ?,它是否神奇地创建了?

谢谢

3 个答案:

答案 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