注册 登录
编程论坛 C语言论坛

指针无法指向二维数组,呼叫大佬!来自底层世界的求助!

拼尽全力 发布于 2019-08-24 09:08, 2620 次点击
无法从“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;   
}
9 回复
#2
TysonKoothra2019-08-24 09:44
用数组指针来指向一个二维数组。
int (*p)[3]=a;
也可以这么写
int (*p)[3] = &a[0];
声明与赋值分开是这样的。

int (*p)[3];
p = a;  // p = &a[0];


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

#3
燕小六2019-08-24 10:25
或者int **p也可以
#4
TysonKoothra2019-08-24 10:49
回复 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;
}
#5
吹水佬2019-08-24 20:08
#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;
}
#6
拼尽全力2019-08-25 08:33
这里昨天总结了一下,但仍有疑虑!
=========================================================================================================================================
二维数组定义:数组的数组
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指向的是列吗?   为啥数组指针就可以直接指向二维数组行首地址???
烦请各位路过的前辈指点一二!
 ————————————————
#7
jklqwe1112019-08-25 08:58
回复 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] 这个才是指针
#8
lxk17329422019-08-27 19:03
    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];
#9
jklqwe1112019-08-27 21:59
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]时越界。
#10
lxk17329422019-08-28 10:31
那句话是要申请一个二级指针,为其开辟一段空间,大小为两个指向int型的指针
改成int **p = (int **)malloc(sizeof(int *) * 2);试试

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

1