小弟我太笨了!小弟我不懂这个有关问题!C语言
我太笨了!我不懂这个问题!C语言!
#include<stdio.h>
void send(const char scmd[])
{
printf("%d\n",sizeof(scmd));//这里输出是什么?
}
void main(void)
{
char sr[6]={0x06,0x00,0x00,0x06,0x23};
printf("%d\n",sizeof(sr));//这里输出是6
send(sr);
}
------解决方案--------------------
数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。
------解决方案--------------------
数组作为形参传递给函数时,只是传递了一份指向该数组指针的copy,即scmd为一个指针,指向char型数组,在32位机器上指针大小为4个字节。
------解决方案--------------------
作为函数的参数,数组会“弱化”为指针。记住就行了。。4
------解决方案--------------------
当一个数组作为参数传递时,是直接给地址的,具体可以看反汇编,而32位系统,指针是占用4字节的
------解决方案--------------------
sizeof(char*)
------解决方案--------------------
数组作为形参就是一指针,建议看看c和指针这本书
#include<stdio.h>
void send(const char scmd[])
{
printf("%d\n",sizeof(scmd));//这里输出是什么?
}
void main(void)
{
char sr[6]={0x06,0x00,0x00,0x06,0x23};
printf("%d\n",sizeof(sr));//这里输出是6
send(sr);
}
------解决方案--------------------
数组作为函数参数的话,是以指针的方式传进来的,所以sizeof(scmd)相当于sizeof(char*),在32位系统上一般为4个字节。
------解决方案--------------------
数组作为形参传递给函数时,只是传递了一份指向该数组指针的copy,即scmd为一个指针,指向char型数组,在32位机器上指针大小为4个字节。
------解决方案--------------------
作为函数的参数,数组会“弱化”为指针。记住就行了。。4
------解决方案--------------------
当一个数组作为参数传递时,是直接给地址的,具体可以看反汇编,而32位系统,指针是占用4字节的
------解决方案--------------------
sizeof(char*)
------解决方案--------------------
数组作为形参就是一指针,建议看看c和指针这本书