C中 传递 数组 ,参数不能传递进去。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C中 传递 数组 ,参数不能传递进去。相关的知识,希望对你有一定的参考价值。
void upReport(int Rnum)
uint8 newreport[9];
DisplayHistoryDate(2,newreport );
void DisplayHistoryDate (uint8 line, uint8 *shuzu )
uint8 n;
const char *pText;
char pLcdLineBuffer[16];
//GetStuctData(shuzu);
pLcdLineBuffer[0] = ' ';
pLcdLineBuffer[1] = '2';
pLcdLineBuffer[2] = '0';
pLcdLineBuffer[3] = getTimeBit(shuzu[6],2);
pLcdLineBuffer[4] = getTimeBit(shuzu[6],1);//getTimeBit(CLOCK_TIME.year,1) ;
pLcdLineBuffer[5] = 'q';
pLcdLineBuffer[6] = 'r'; //年
pLcdLineBuffer[7] = getTimeBit(shuzu[5],2);
pLcdLineBuffer[8] = getTimeBit(shuzu[5],1);
pLcdLineBuffer[9] = 's';
pLcdLineBuffer[10] = 't'; //月
pLcdLineBuffer[11] = getTimeBit(shuzu[4],2);
pLcdLineBuffer[12] = getTimeBit(shuzu[4],1);
pLcdLineBuffer[13] = 'u';
pLcdLineBuffer[14] = 'v'; //日
pLcdLineBuffer[15] = ' ';
pText=pLcdLineBuffer;
for (n=0; n<16; n++)
HalLcd_HW_WriteChar(line, n, (*(pText++)));
newreport 数组值不能传递给DisplayHistoryDate中的数组请教为什么
void DisplayHistoryDate (uint8 line, uint8 *shuzu )
写到 void upReport(int Rnum) 前面。
或 前面加 函数原型声明。
至于调用,
写成 DisplayHistoryDate(2, &newreport[0] ); 就一定可以了。
为啥我不能将常量数组作为参数传递?
【中文标题】为啥我不能将常量数组作为参数传递?【英文标题】:Why can't I pass constant arrays as arguments?为什么我不能将常量数组作为参数传递? 【发布时间】:2016-08-16 07:17:42 【问题描述】:在 C 中,为什么我不能这样做:
arrayfn(1.0, 2.0, 3.0);
如果arrayfn
是某个函数,它接受double[]
或double*
类型的一个参数,无论哪个。尝试这样做会给我一个语法错误。
有没有一种方法可以让我在 C 中实现这样的目标 - 生成并立即传递一个在编译时已知的数组 - 从而避免花费一行代码预先声明和填充它?
【问题讨论】:
您可以使用复合文字。 好答案;试过了;有用;我们到此结束 在您接受答案之前,我们还没有完成。 【参考方案1】:简答:您需要使用compound literal。类似的东西
arrayfn( (double[]) 1.0, 2.0, 3.0 );
应该做的工作。
一些解释
说到这部分,为什么arrayfn(1.0, 2.0, 3.0);
不起作用,因为没有复合文字的语法,1.0, 2.0, 3.0
是一个大括号括起来的初始化列表。它不表示可以用作函数参数的“对象”。它们不是 “常量数组”,您可能已经想到了。
要添加更多信息,请引用 C11
,第 §6.5.2.5 章,复合文字
一个后缀表达式,由一个带括号的类型名称后跟一个大括号括起来的 初始化器列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。
【讨论】:
谢谢!有用。有点奇怪,我的直接冲动是运行(double*)1.0, 2.0, 3.0
,它没有做我想要做的事情 - 但足够接近!
@user3528438:const
是可选的;复合文字不是常量数组,除非您希望它是一个。可以完全合法地被调用函数中的代码修改。以上是关于C中 传递 数组 ,参数不能传递进去。的主要内容,如果未能解决你的问题,请参考以下文章