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 个解决方案
byte** p_List[10];
p_List[0]=NUM_0;
p_List[1]=NUM_1;
..............
不是能这样定义
这样确实定义成包含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都可以
为什么不直接用byte p_List[10][24][16]或bype* p_List[24][16]
刚刚在 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
请问这错误是怎么回事??不胜感激!!!!
回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]貌似二维,其实还是一维啊……
刚刚再次使用静态数组 p_List[10][24][16] 测试了,和使用指针的出错信息是一样的
说明指针的定义本身是没有错的,估计是RAM或者是其他资源不够引起的错误