标题:指针无法指向二维数组,呼叫大佬!来自底层世界的求助!
只看楼主
拼尽全力
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2019-7-31
结帖率:0
 问题点数:0 回复次数:9 
指针无法指向二维数组,呼叫大佬!来自底层世界的求助!
无法从“int [2][3]”转换为“int *”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换




#include<stdio.h>
int main(void)
{
    int a[2][3] = { {1,2,3},{4,5,6} };
    int *p=a;   
}
搜索更多相关主题的帖子: 指针 指向 世界 int 转换 
2019-08-24 09:08
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
用数组指针来指向一个二维数组。
int (*p)[3]=a;
也可以这么写
int (*p)[3] = &a[0];
声明与赋值分开是这样的。
int (*p)[3];
p = a;  // p = &a[0];


[此贴子已经被作者于2019-8-24 09:46编辑过]

2019-08-24 09:44
燕小六
Rank: 4
来 自:北京
等 级:业余侠客
威 望:3
帖 子:49
专家分:247
注 册:2017-11-29
得分:0 
或者int **p也可以
2019-08-24 10:25
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:0 
回复 3楼 燕小六
如果这样写的话,会出现段错误 Segmentation fault: 11。
程序代码:
#include<stdio.h>
int main(void)
{
    int a[2][3] = { {1,2,3},{4,5,6} };
//    int (*p)[3]=a;    
    int **p = a;
    for(int i = 0; i < 2; i++)
        for(int j = 0; j < 3; j++)
            printf("%d,", p[i][j]);
    puts("");
    return 0;
}
2019-08-24 10:49
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
#include <stdio.h>
int main(void)
{
    int a[2][3] = { {1,2,3},{4,5,6} };
    int *p = &a[0][0];
    int i;
    for (i=0; i<6; ++i,++p)
        printf("%d ", *p);
    return 0;
}
2019-08-24 20:08
拼尽全力
Rank: 1
等 级:新手上路
帖 子:5
专家分:4
注 册:2019-7-31
得分:0 
这里昨天总结了一下,但仍有疑虑!
=========================================================================================================================================
二维数组定义:数组的数组
float rain[2][3]; 内含2个数组元素的数组,每个数组元素内含3个float类型的元素。
此时可以想象出一个2*3的矩阵,这个二维数组由两个一维数组组成,每个一维数组内含3个float类型的元素.
-——>:rain代表二维数组的行首地址;rain[0]与rain[1]是内含3个float值的一维数组,即rain[0]为一维数组的首地址,那么rain[0][0]是一个float类型的值。

由此可以知道:
int main(void)
{
int a[2][3] = { {1,2,3},{4,5,6} };
int *p=a[0]; // 二维数组中第一行的一维数组的首地址
//int *p=&a[0][0];
}
=======================================================================================================================================================
此外还可以定义一个数组指针; (数组指针是指向数组地址的指针,其本质为指针)

int *p[3] =a;

这个数组指针仍存在疑虑,此处的int *p[3] 是啥意思?p指向的是列吗?   为啥数组指针就可以直接指向二维数组行首地址???
烦请各位路过的前辈指点一二!
 ————————————————
2019-08-25 08:33
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
回复 6楼 拼尽全力
对于指针的理解还是有误,int *p=a[0];int *p是指向int 类型的指针,a[0]是个数组,两者不是一个东西。int *p[3] =a;   int *p[3]首先确定他是一个数组,只是存放的是指针,a是二维数组首地址,两者也不样。
int (*p)[3]=a;  int (*p)[3] 这个才是指针
2019-08-25 08:58
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
    int a[2][3] = { {1,2,3},{4,5,6} };
    int **p = (int **)malloc(sizeof(int **));

    for (int i = 0; i < 2; i++)
        p[i] = a[i];
2019-08-27 19:03
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
int a[2][3] = { {1,2,3},{4,5,6} };
    int **p = (int **)malloc(sizeof(int **));

    for (int i = 0; i < 2; i++)
        p[i] = a[i];

int **p = (int **)malloc(sizeof(int **));  这句是要干啥
p[i] = a[i];  两个问题:  类型不符,p[1] ,p[2]时越界。
2019-08-27 21:59
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
那句话是要申请一个二级指针,为其开辟一段空间,大小为两个指向int型的指针
改成int **p = (int **)malloc(sizeof(int *) * 2);试试

[此贴子已经被作者于2019-8-28 10:51编辑过]

2019-08-28 10:31



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




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

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