单片机用C语言向SD写入指令中“((unsigned char *)&argument)[0]”是什么意思、怎么用

单片机用C语言向SD写入指令中“((unsigned char *)&argument)[0]”是什么意思、怎么用,第1张

一层层的扒开来解释

1、&argument -- 取变量argument的地址

2、(unsigned char )(&argument) -- 将这个地址强制类型转换为无符号字符型的指针

说明:类似于(unsigned char )0x10010010,讲一个整型数强制类型转化成一个指针值,然后可以做绝对地址的访问。

3、(unsigned char )(&argument)[0] -- 将这个指针用数组的方式访问

说明:有时我们可以这样来访问 (1) unsigned char p p[0] 等于同p p[1]等同于(p+1)

(2)unsigned char a[5] a 等同于a[0] (a+1)等同于a[1]

最终完成的功能就是将32位的argument拆成4个8位的字符型数据,如果您觉得复杂你可以这样来写

SdWrite(unsigned char)(argument>>24));

SdWrite(unsigned char)(argument>>16));

SdWrite(unsigned char)(argument>>8 ));

SdWrite(unsigned char)(argument>>0 ));

char BOOK::retname()

{

return name;

}

void BOOK::searchbook()

{

clrscr();

int flag=0;

char name2[30];

FILE fp;

cout<<"Enter Book Name: ";

cinget();

gets(name2);

char name1=retname();

fp = fopen("Recordstxt","rb");

while(fread(&BOOK,sizeof(BOOK),1,fp)==1){

if(strcmpi(name1,name2)==0)

{

flag=1;

cout<<"This book is available: ";

}       }

}

扩展资料:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。

参考资料来源:百度百科-C语言

函数,是编程语言中可以独立运行的一个代码块。

在C语言中,程序从main()函数开始运行,其他函数要被main函数调用才可以运行。

在从shell解释器运行编译好的可执行程序时,main函数会被shell启动,开始运行。

C语言的函数在使用时要经过3个步骤:声明、定义、调用。

函数声明,就是给出函数的原型,让程序员知道怎么给函数传参数,怎么接收返回值,让编译器知道怎么进行代码的类型检查。main函数的声明是这样的:

int main();

它的返回值是int类型,不需要传参数。

printf()函数的声明是这样的:int printf(const char fmt, );

它的返回值是int类型,第一个参数是格式字符串,之后可以跟可变参数。

函数声明的语法是:

返回值类型 函数名(形参类型0 形参变量0, 形参类型1 形参变量1);

如果有多个形参,就以逗号隔开。每个形参都有类型和变量名,其中形参变量名在声明时可以省略。最后以分号结尾,结束声明语句。

如果不想让人看到函数的源码,就可以只提供一个声明和一个编译后的文件,这样别人就只能看汇编码了(笑)。C语言的这个设计,对保护知识产权还是有利的。

函数定义,就是在声明之后不跟分号,而是以大括号表示函数体,把函数的具体代码写在大括号内部。

上图中的main()函数就是定义,printf()函数是声明。

定义,实现的是函数的内容。函数是不能多次定义的,否则编译器不知道采用哪个定义的代码。

但函数可以多次声明,只要声明都是一样的,不互相矛盾。

只要打了两个大括号{},就算定义了函数。空实现也是实现,可以先占住这个位置,以后再填写具体的函数代码。即,先给出整个程序的框架来,然后再填写细节。

在实现了函数之后,必须去调用它,它才会运行。

除了main函数是被shell启动的,其他函数都要直接或间接被main函数调用。

某一个函数在运行时,实际是存在一条从main函数到它的调用链的。

函数调用的语法是:

函数名(实参变量0, 实参变量1);

如果有多个实参,则以逗号隔开。如果要接收函数调用的返回值,可以用一个变量去接收:

返回值变量 = 函数名(实参变量0, 实参变量1);

返回值变量的类型,要与函数的返回值类型一致,(返回值变量)在使用之前要先声明。

对于有返回值的函数,也可以不接收它的返回值。例如,printf()虽然有个int类型的返回值,用于表示打印了多少个字符,但一般不接收它。

所以C语言的入门代码都是printf("hello world\n");

而不是int ret = printf("hello world\n");

函数名,在C语言中属于标志符(identity)。

标志符的命名规则是,以下划线或大小写字母开始,之后可以跟数字、字母、下划线,(但不能跟运算符或其他特殊符号)。

它们在代码中用于表示变量名、结构体类型名、函数名,或者给goto使用的标号。

基本类型的类型名,都被定义为了关键字,不能再用作标志符。

struct S {

int a;

int b;

} s;

S是标志符,表示结构体类型S。

a是标志符,表示结构体的成员变量a。

s是标志符,表示变量s,它的类型是结构体类型S。

函数名,也属于标志符,所以函数名也要以下划线或大小写字母开始,不能是关键字、运算符、或其他特殊符号。

0123,这不能做函数名,C语言的以0开始的数字是八进制数字。

0x123,也不能做函数名,以0x开始的数字是16进制的数字。

main,可以做函数名,这是主函数,在整个程序里只能有一个,不能作为普通函数的名字。

__schedule,以下划线开始,可以做函数名。

不过,以两个下划线开始的函数,大多是Linux系统或C库的函数。普通函数最好别这么命名。

char,这不能做函数名,它是字符类型的关键字。

+,这也不能,它是表示加法的运算符。

CreateWindowEx,这可以做函数名,一看就是典型的匈牙利风格,微软的代码(笑)。这个函数是windows系统上创建窗口的API。

匈牙利风格的代码,是从微软开始流行的一种风格,函数名以一个或多个英文单词命名,每个单词的首字母大写,其他字母小写。

不过Linux的代码(包括第三方的软件),还是保持上古C代码的那种下划线风格,全部字母小写,单词之间以下划线分割,而且多使用缩写。

有时候,缩写之后只剩下几个字母,就直接新组一个词当函数名了。

例如,Linux上启动新程序的函数execve(),就是个缩写的单词。

执行的英文单词叫execute,windows上的可执行程序叫exe文件,就是这个词的前3个字母,Linux也选了这三个字母。

cve这三个字母,来自完整的main函数的参数列表:

int main(int argc, char argv[], char envp);

main函数的完整声明是上面这个样子的,int main()这个是简化版的。

其中第一个参数argc,表示要传给main函数的参数个数。通过命令行参数的形式传递。arg是参数argument的缩写,c就是count,即参数个数。

argv,是(传给main函数的)参数字符串的数组,v指的是vector。

envp,是环境变量的路径,environment path。

所以,启动main的系统调用就叫作execve()了,而不叫StartProgram()。

虽然后者明显容易理解,但它字母多啊,系统调用的API哪能让人一眼就看出来是启动进程的呢(汗)。

回到开头,main()函数在Linux上就是被execve()这个API启动的,然后其他函数要被main函数直接或间接调用。

不被main函数(直接或间接)调用的函数,并不会运行。

上图的代码只会打印add,因为main只调用了add()函数,没有调用sub()函数。

这段简单的代码,只有这三个函数,sub()没有被调用。

if判断语句后的括号中返回的一定是一个boolean型的判断结果

你给出的这个判断的意思是说:

argument的length属性如果长度大于0的话,结果返回true,if程序块中的程序将被执行,否则返回false,if程序块中的程序将不会执行。

以上就是关于单片机用C语言向SD写入指令中“((unsigned char *)&argument)[0]”是什么意思、怎么用全部的内容,包括:单片机用C语言向SD写入指令中“((unsigned char *)&argument)[0]”是什么意思、怎么用、c语言过程中出现initializing argument 1 of `int strcmp(const char*, const char*)'要怎么修改呀、函数声明与函数定义分别在程序中的什么位置为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9873088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存