首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用“指针到数组10的int"?

如何使用“指针到数组10的int"?
EN

Stack Overflow用户
提问于 2012-02-16 09:34:21
回答 4查看 11.3K关注 0票数 6

我有以下代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int(* a)[10];  //declare a as pointer to array 10 of int
    int b[10];    // taken a array of 10 int
    b[2]=32;       
    a=&b;      
    printf("b is on %p\n",&b);
    printf("a is on %p\n",a);
    printf("magic is %d\n",a[2]); // why this is not showing 32
    return 0;
}

输出:

代码语言:javascript
复制
b is on 0xbfa966d4
a is on 0xbfa966d4
magic is -1079417052

这里我把a作为指向数组b的int的数组10的指针,那么现在为什么不能在a[2]上获得32的值?

a[2]被计算为*(a+2),所以现在有数组b的地址,所以*(b+2)*(a+2)是相似的,为什么这里我没有得到32的值呢?

编辑:我通过使用

代码语言:javascript
复制
(*a)[2]

但我不明白它是怎么运作的..。看看什么时候

a[2]*(a+2)a+2是加2 * sizeof(int[10])字节。

这样(*a)[2]怎么扩展?

EN

回答 4

Stack Overflow用户

发布于 2012-02-16 09:37:25

由于a已经是一个指针,您必须取消引用它,以便引用它所指向的数组:

代码语言:javascript
复制
(*a)[2]
票数 7
EN

Stack Overflow用户

发布于 2012-02-16 09:49:49

代码语言:javascript
复制
#include<stdio.h>

int main()
{
    int(* a)[10];  //declare a as pointer to array 10 of int
    int b[10];    // taken a arry of 10 int
    b[2]=32;       
    a=&b;      
    printf("b is on %p\n",&b);
    printf("a is on %p\n",a);
    printf("magic is %p\n",a + 2); // Changed to show pointer arithmetic
    return 0;
}

这将打印以下内容:

代码语言:javascript
复制
b is on 0xbfe67114
a is on 0xbfe67114
magic is 0xbfe67164

你知道是怎么回事吗?magic - a等于80,也就是4* 10 * 2。这是因为a是一个指向10个整数数组的指针,所以sizeof(*a) == 10 * sizeof(int)而不是sizeof(a) == sizeof(int),这就是你所期望的。下次要注意指针算法中的类型!

票数 1
EN

Stack Overflow用户

发布于 2015-01-13 07:25:32

我无法在这里添加评论,因为它需要50声誉。因此,我的问题,对张贴的问题。很抱歉,如果我将问题张贴在回答框中,违反了一些规则。这个问题表明,我们在执行指针算法时应该小心。但是,如果仅仅通过使用整数的指针就可以完成同样的事情,那么使用数组的指针有什么好处呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9308695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档