帮忙看下这个函数,C语言!传递给函数的是啥?
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/08 16:33:18
帮忙看下这个函数,C语言!传递给函数的是啥?
void DrawPicture_Center(u16 *PictureAddr)
这个是函数的prototype定义
用的时候,写法很奇怪:DrawPicture_Center((u16 *)picture1);
就是实在是不知道(u16 *)picture1这种表达方式是什么,如果没有括号,变成
u16 *picture1 那么是16位的名字叫picture1 的 array,但显然不能这么用.
void DrawPicture_Center(u16 *PictureAddr)
这个是函数的prototype定义
用的时候,写法很奇怪:DrawPicture_Center((u16 *)picture1);
就是实在是不知道(u16 *)picture1这种表达方式是什么,如果没有括号,变成
u16 *picture1 那么是16位的名字叫picture1 的 array,但显然不能这么用.
![帮忙看下这个函数,C语言!传递给函数的是啥?](/uploads/image/z/6747921-9-1.jpg?t=%E5%B8%AE%E5%BF%99%E7%9C%8B%E4%B8%8B%E8%BF%99%E4%B8%AA%E5%87%BD%E6%95%B0%2CC%E8%AF%AD%E8%A8%80%21%E4%BC%A0%E9%80%92%E7%BB%99%E5%87%BD%E6%95%B0%E7%9A%84%E6%98%AF%E5%95%A5%3F)
你的picture1不是u16*类型,可能是u8*类型,要传给DrawPicture_Center做参数,需要转换成u16*类型.如果你不加类型转换,有的编译器会发出警告,有些甚至直接报错提示.
我们一般使用数值传递,比如:
char a=10;
int fun(int x){}
int main()
{
fun(a);
return 0;
}
这种时候,fun传入的a是char类型,但编译器能够自动进行类型提升,把char升为int数值.这里一般都不会警告或报错.
指针则更严肃,传入的是地址.
再问: 你好,那么8位强制转16位具体怎么操作的呢?高位补零吗?都是无符号的哦! 是不是这样: 原来无符号8位的数字 8: 00001000 强制转换16位后的数字 8:00000000 00001000 ???
再答: 不是,u8连续2个字节,按低8位高8位(Intel格式)这样16位作为一个16位的。你说的那中去情况,是单纯8位数据转16位数据。 现在是指针变量,它本身是一个地址值,u8*则指向空间每一个单元都是u8类型的,u16*则是说指向内存处,每16位表示一个元素。 假设指向地址的数据为(字节序):01 02 05 02 如果按u8*理解,这里有4个u8类型的元素,分别是十进制 1,2,5,2 若是按u16*理解,只有2个u16数据,分别是十进制513(=1+2*256=513)和517(=5+2*256=517)
再问: 谢谢你!最佳答案肯定是你的了,我想问下我的理解正确否: 对指针进行强制转换,实际上是改变了指针的“偏移量”,u8原来是每8bit算一个数据,强制转换成u16后每16bit算一个数据。 因此在u8“看来”,01 0F 是0000 0001 0000 1111,是两个数据,而在u16看来,是00000001 00001111 一个数据,对吧?
再答: 是的,可以这么看待,至少不是错的,也比较好理解 u16类型,还得注意高低字节序,一般有Intel格式和Motorola格式,前者低字节在前,高字节在后;后者则是先高字节,再低字节。很多Motorola的单片机或微处理器都是Motorola格式字节序。
我们一般使用数值传递,比如:
char a=10;
int fun(int x){}
int main()
{
fun(a);
return 0;
}
这种时候,fun传入的a是char类型,但编译器能够自动进行类型提升,把char升为int数值.这里一般都不会警告或报错.
指针则更严肃,传入的是地址.
再问: 你好,那么8位强制转16位具体怎么操作的呢?高位补零吗?都是无符号的哦! 是不是这样: 原来无符号8位的数字 8: 00001000 强制转换16位后的数字 8:00000000 00001000 ???
再答: 不是,u8连续2个字节,按低8位高8位(Intel格式)这样16位作为一个16位的。你说的那中去情况,是单纯8位数据转16位数据。 现在是指针变量,它本身是一个地址值,u8*则指向空间每一个单元都是u8类型的,u16*则是说指向内存处,每16位表示一个元素。 假设指向地址的数据为(字节序):01 02 05 02 如果按u8*理解,这里有4个u8类型的元素,分别是十进制 1,2,5,2 若是按u16*理解,只有2个u16数据,分别是十进制513(=1+2*256=513)和517(=5+2*256=517)
再问: 谢谢你!最佳答案肯定是你的了,我想问下我的理解正确否: 对指针进行强制转换,实际上是改变了指针的“偏移量”,u8原来是每8bit算一个数据,强制转换成u16后每16bit算一个数据。 因此在u8“看来”,01 0F 是0000 0001 0000 1111,是两个数据,而在u16看来,是00000001 00001111 一个数据,对吧?
再答: 是的,可以这么看待,至少不是错的,也比较好理解 u16类型,还得注意高低字节序,一般有Intel格式和Motorola格式,前者低字节在前,高字节在后;后者则是先高字节,再低字节。很多Motorola的单片机或微处理器都是Motorola格式字节序。
帮忙看下这个函数,C语言!传递给函数的是啥?
C语言如何把一个函数的返回值传递给另一个函数
C语言编程输入是个整数,用函数编程将其中最大的数与最小的数位置互换,然后输出数组.帮忙看下我这个程序
c语言中函数中值的传递是什么意思? 谢了
C语言中,自定义函数可以使用全局变量,为什么还要传递给函数一些参数呢?
在C语言中,数组作为参数,是怎样在函数之间传递的啊?
说C语言中函数值传递与地址传递的方法
帮忙用C语言写一个VC6下返回值是1到9随机数的函数
c语言 指针作为函数参数传递时属于值传递还是地址传递
C语言延时函数延时函数是怎么写的,比如sleep这个函数的源代码程序,
C语言开方的函数是哪个?
C语言编程:用数组求Fibonacci数列前20个数 最后把数组作为参数传递给add函数,求这20个数的和并显示