| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 477 人关注过本帖
标题:关于 int (*a)[10] 这个语句的问题
只看楼主 加入收藏
木胖子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2018-12-17
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
关于 int (*a)[10] 这个语句的问题
具体问题如下,一个指向数组的指针
定义:int(*p)[10];
赋值时候,将它指向一个具有10个元素的int型数组a;
打印p出现如下效果。   
程序代码:
void main()
{
    int i;
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[10];
    p = a;
    for(i=0;i<10;i++)
    {
        printf("%d\n",*(p+i));
        
    }
    system("pause");
    
}


图1


发现p=a出有一个警告:int *型   分配给 int(*)[10]类型。
于是改进一下用强制转换,然而打印出来,仍旧是这个样子。
程序代码:
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i;
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[10];
    p = (int (*)[10])a;
    for(i=0;i<10;i++)
    {
        printf("%d\n",*(p+i));
        
    }
    system("pause");
    
}


图2


最后,用上了二级指针,正常了。
程序代码:
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i;
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[10];
    p = &a;
    for(i=0;i<10;i++)
    {
        printf("%d\n",*(*p+i));
        
    }
    system("pause");
    
}


图3

求问,图1,2问题出在哪,有人能帮我解释一下嘛?实在是搞不懂了,不是等着喂,真的能力尽了。

[此贴子已经被作者于2018-12-17 21:23编辑过]

附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: int main i++ system include 
2018-12-17 21:12
木胖子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2018-12-17
  得分:0 
我自己顶一下贴(不允许的话希望版主警告我,新人)!

[此贴子已经被作者于2018-12-17 21:59编辑过]

2018-12-17 21:20
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
  得分:10 
(*p)[10]  是一个指针,指向一行拥有10个int数据类型的数组,例如:a[10],a[2][10]
程序代码:
void main()
{
    int i;
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[10];
    p = &a;
    for(i=0;i<10;i++)
        printf("%d\n",(*(p+0))[i]);  
}


程序代码:
void main()
{
    int i;
    int a[10][1]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[1];
    p = a;
    for(i=0;i<10;i++)
        printf("%d\n",(*(p+i))[0]);  
}


int *p[10]  表示一维数组,里面含有10个指向整型的指针
程序代码:
void main()
{
    int i;
    int a[10][1]={0,1,2,3,4,5,6,7,8,9};
    int *p[10];
    for(i=0;i<10;i++)
        p[i] = (a+i)[0];
    for(i=0;i<10;i++)
        printf("%d\n",*p[i]);  
}




[此贴子已经被作者于2018-12-19 13:05编辑过]

2018-12-17 22:30
lin5161678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:525
专家分:1930
注 册:2011-12-3
  得分:10 
回复 3楼 kfyniriu
程序代码:
void main()
{
    int i;
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    int (*p)[10];
    p = &a;
    for(i=0;i<10;i++)
        printf("%d\n",*(p+0)[i]);  
}

你搞错优先级了
*(p+0)[i] == *((p+0)[i]) == p[i][0]
第一个没问题 后面的全部越界了
应该写
p[0][i] 或者 (*p)[i]
2018-12-17 23:24
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
  得分:0 
回复 4楼 lin5161678
确实是我写错了,已订正
2018-12-19 13:04







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030262 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved