标题:关于 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: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册: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]

https://zh.
2018-12-17 23:24
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
得分:0 
回复 4楼 lin5161678
确实是我写错了,已订正
2018-12-19 13:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492095-1-1.html




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

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