永发信息网

我写了个函数,其中要用到一个二维数组的一维长度,使用sizeof()吗?

答案:5  悬赏:60  手机版
解决时间 2021-03-04 06:21
  • 提问者网友:欲劫无渡
  • 2021-03-03 20:11
我用了sizeof()函数了,可是在编译的时候会提示错误的指针转换,这应该怎么弄呢?
二维数组如下:
uchar code Matrix_ON[][5]={
{0xFE,0x40,0x30,0x40,0xFE}, // -M-
{0x24,0x2A,0x2A,0x1C,0x02}, // -a-
{0x20,0xFC,0x22,0x22,0x24}, // -t-
{0x20,0x1E,0x20,0x20,0x10}, // -r-
{0x00,0x00,0x9E,0x00,0x00}, // -i-
{0x22,0x14,0x08,0x14,0x22}, // -x-
{0x00,0x6C,0x6C,0x00,0x00}, // -:-
{0x7C,0x82,0x82,0x82,0x7C}, // -O-
{0xFE,0x20,0x10,0x08,0xFE} // -N-
};
需要用到长度的函数如下:
void display_char(uint x,uchar *p)
{
uchar i;
uint length;
length = sizeof(p);
for(i=0;i<length;i++)
{
char5_dis(x,5*i,p[i]);
}
}
这到底应该怎么写呢?
最佳答案
  • 五星知识达人网友:几近狂妄
  • 2021-03-03 21:21
(1)你可以借用一下字符串的特点,如果你的p指向的数组中,数据没0这个值,可以在传递时,数组的最后一位设定为0,这样可以检测0来检测是否到了数组尾。(2)如果不能确定数据中的数值范围,则必须传递数组的有效数据的长度到函数中。
//(1)
void display_char(uint x,uchar *p)
{
uchar i;

for(i=0; p[i] != 0 ;i++)
char5_dis(x,5*i,p[i]);
}
//(2)
void display_char(uint x,uchar *p , uint length )
{
uchar i;

for(i=0;i<length;i++)
char5_dis(x,5*i,p[i]);
}

sizeof(指针变量) = 4
这不是规定,而是因为指针变量是用来存储地址的,其值是个地址值,即是个数值,因此,C中对指针变量的空间大小是和long类型一致的。如果是在64位的编译系统下,sizeof(指针)=8
全部回答
  • 1楼网友:煞尾
  • 2021-03-03 23:19
你里面有些许错误啊,大哥
  • 2楼网友:上分大魔王
  • 2021-03-03 22:37
那数组好复杂。。
  • 3楼网友:琴狂剑也妄
  • 2021-03-03 22:10
你好! 因为看不到display_char函数的调用,所以只能猜测一下了 这个函数的第二个参数是一个指针,所以 length = sizeof(p); length永远都等于4,如果p是数组的首地址,那么计算出来的长度就不符合你的逻辑要求了吧。 如果被我猜中了的话,在display_char调用前计算长度,然后作为第三个参数传进来 我的回答你还满意吗~~
  • 4楼网友:妄饮晩冬酒
  • 2021-03-03 21:42
因为看不到display_char函数的调用,所以只能猜测一下了 这个函数的第二个参数是一个指针,所以 length = sizeof(p); length永远都等于4,如果p是数组的首地址,那么计算出来的长度就不符合你的逻辑要求了吧。 如果被我猜中了的话,在display_char调用前计算长度,然后作为第三个参数传进来
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯