如何定义一个数组,其元素是指向一个二维数组的指针????


BYTE  (*(p_List[10]))[16]= 

    NUM_0, 
    NUM_1, 
    NUM_2,  
    NUM_3, 
    NUM_4, 
    NUM_5, 
    NUM_6, 
    NUM_7, 
    NUM_8, 
    NUM_9 


NUM_0 到 NUM_9都是数组,格式如下: 
BYTE NUM_0[24][16]= 


}; 

我的本意是想定义p_List数组,它的每个元素都是一个指向二维数组的指针……

请问这样定义对吗??我在IAR For AVR的编译器上编译好像不是我想要的结果……
(按照编译器的理解,似乎是把p_List编译成了一个包含10*16个元素的数组了)

请教各位大侠,我的定义是对的吗??如果不正确,要如何定义才能实现目的?

6 个解决方案

#1


byte** p_List[10];
p_List[0]=NUM_0;
p_List[1]=NUM_1;
..............

#2


不是能这样定义
这样确实定义成包含16个数组的(*)[]指针
这样定义 
char NUM_0[1][1] = {1};
char NUM_1[1][1] = {2};
char NUM_2[1][1] = {2};
char  *(p_List[10][16])= 

    NUM_0, 
    NUM_1,
NUM_2
} ;
这个测试例子
在ads avr没测试 vc都可以

#3


为什么不直接用byte p_List[10][24][16]或bype* p_List[24][16]

#4


刚刚在  VC6 中测试  ,类似的定义可以完美实现功能啊~~难道是编译器的问题吗??


//====main.c========
#include <stdio.h>

#define BYTE unsigned char

BYTE NUM_0[3][2]= 

   9,1,
   2,3,
   4,8
};
BYTE NUM_1[3][2]= 

   7,1,
   2,3,
   4,6
};

BYTE NUM_2[3][2]= 

   5,1,
   2,3,
   4,4
};

BYTE NUM_3[3][2]= 

   0,1,
   2,3,
   4,5
};


BYTE  (*(p_List[4]))[2]= 

    NUM_0, 
    NUM_1, 
    NUM_2,  
    NUM_3, 
};

BYTE   (*p_num)[2];

void main(void)
{
BYTE a , i,j,k;
i = 0;
j = 0;
k = 0;
for(k=0;k<4;k++)
{
       p_num = p_List[k];
   for(i=0;i<3;i++)
   {
  for(j=0;j<2;j++)
   printf("%d", p_num[i][j]);
   }
}
gets(&a);
}
 
//=================================


以上代码在VC中测试通过

在IAR中,错误信息如下:
Error[e16]: Segment NEAR_F (size: 0x23be align: 0) is too long for segment definition. At least 0x3f2 more bytes needed.  
The problem occurred while processing the segment placement command  
"-Z(CODE)NEAR_F=_..X_FLASH_BASE-_..X_FLASH_END", where at the moment of placement the available memory  
ranges were "CODE:34-1fff" 
   Reserved ranges relevant to this placement: 
   CODE:34-1fff         NEAR_F 
 
请问这错误是怎么回事??不胜感激!!!!

#5


回guochun(yingc):

byte** p_List[10];
p_List[0]=NUM_0;
p_List[1]=NUM_1;
这样依然编译出错,信息如下:
Error[Pe094]: the size of an array must be greater than zero  
Error[Pe077]: this declaration has no storage class or type specifier 
Error[Pe148]: variable "p_List" has already been initialized 

什么不直接用byte p_List[10][24][16]或bype* p_List[24][16]

如果使用p_List[10][24][16],那么就会再次分配空间,这样就不能用指针去变换了。
byte* p_List[24][16]   这样定义出来的应该是24*16个指向byte类型的指针吧?



回goodluckyxl(被人遗忘的狗) :

char NUM_0[1][1] = {1};
char NUM_1[1][1] = {2};
char NUM_2[1][1] = {2};
char  *(p_List[10][16])= 

    NUM_0, 
    NUM_1,
    NUM_2
} ;

*(p_List[10][16])定义出来的应该是10*16个指向char的指针吧??(只能指向一维数组)
恰好 NUM_0[1][1]貌似二维,其实还是一维啊……



#6


刚刚再次使用静态数组  p_List[10][24][16]  测试了,和使用指针的出错信息是一样的

说明指针的定义本身是没有错的,估计是RAM或者是其他资源不够引起的错误

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: