打印阵列的内存位置

时间:2015-06-17 16:44:56

标签: c arrays

我是 C 编程语言的新手。我有一个包含2个元素的指针数组。我想打印数组中的值。我写的代码

#include<stdio.h>
int main ()
{
int *bae[] = {10,12};
int i;
for(i=0;i<2;i++) {
printf("%d",*bae[i]);
}
return 0;
}

当我运行此代码时,它给了我一个警告:

warning: (near initialization for 'bae[0]') [enabled by default]
warning: initialization makes pointer from integer without a cast [enabled by default]
warning: (near initialization for 'bae[1]') [enabled by default]

希望你能帮助我找到解决方案

3 个答案:

答案 0 :(得分:2)

bae是一个int指针数组。如果您只想要一个数组,那么它应该是int bae[] = {10, 12};

然后,你可以printf("%d", bae[i]);

警告说的是什么(&#34;初始化使得指针来自整数而没有强制转换&#34;)是在存储它们时将1012转换为int*bae

编辑:如果真的想要使用指针数组,那么你可以做这样的事情(虽然不可取,但绝不比我以前的答案好):

#include<stdio.h>
int main ()
{
    int ten = 10;
    int twelve = 12;
    int *bae[] = { &ten, &twelve };
    int i;
    for(i=0;i<2;i++) {
        printf("%d",*bae[i]);
    }
    return 0;
}

现在会打印1012

答案 1 :(得分:2)

#include <stdio.h>

int main ()
{
    int bae[] = {10,12};
    int i;
    for(i=0; i<2; i++) {
        printf("%d\n", bae[i]);
    }
    return 0;
}

产生输出:

10
12

答案 2 :(得分:0)

int *bae[] = {10,12};

这意味着bae是一个整数指针数组。

printf("%d",*bae[i]);

以上陈述等于*(bae + i)。所以它会尝试访问地址10和11的值,这会导致未定义的行为。