1.连续接收输入字符时 int ch; while(ch != EOF && ch != '\n') ch 为什么被声明为整形,我们不是需要用它来读取字符的嘛? 因为:EOF是一个整形值,它的位数比字符类型要多,把ch声明为整型可以防止从输入读取的字符意外地被解释为EOF.但这也意味着接收字符的ch必须足够大,足以容纳EOF,这就是ch使用整型的原因.字符只是小整型数而已,所以用一个整型变量容纳字符值并不会引起任何问题. 2.一些常用的函数 printf()和scanf() 用于格式化的输…
1.可变参数表是通过宏实现的 宏定义于stdarg.h头文件,它是标准库的一部分.这个头文件声明了一个类型var_list和三个宏--va_start.va_arg.va_end. 我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值. 参数列表在函数中用三点省略号(...).它表示此处可能传递数量和类型未定的参数.函数原型和函数的定义都要这样做. 函数中要声明一个名叫 va_arg 的变量,它用于访问参数列表的未定部分.这个变量通过调用va_start来初始化.它的第一…
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和无条件跳转. if if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事. Go里面if条件判断语句中不需要括号,如下代码所示 if x > 10 {     fmt.Println("x is greater than 10") } els…
函数指针是C语言中几个难点之一.由于8051的C编译器的独特要求,函数指针和再入函数有更多的挑战需要克服.主要由于函数变量的传递.典型的(绝大部分8051芯片)函数变量通过堆栈的入栈和出栈命令来传递.因为8051只有有限的堆栈空间(128字节或更少的64字节),函数变量必须通过不同的方式进行传递.8051的PL/M-51编译器,介绍在固定的存储空间存储变量的方式.当使用连接器时,程序建立一个调用树,计算出函数变量的互斥空间,然后覆盖它们.这就是连接器的“OVERLAY”指令.因为PL/M-51不…
指针变量存储的是地址,所以在函数调用的时候我们能否将指针变量传递给函数?如果不知道结果,那我们可以直接问电脑,输入如下一段代码. void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; //申明字符串指针str并让它指向空地址 GetMemory(str); strcpy(str, "hello world"); printf(str); } str为局部变量,当传…
1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节点数组构建的链表(即使这样,程序也是通过指针来遍历链表). 1.1 单链表 单链表中,每个节点包含一个指向链表下一节点的指针.链表最后一个节点的指针字段的值为NULL.提示链表后面不再有其他节点. 根指针,根指针指向链表的第一个节点,根指针只是一个指针,不包含任何数据. //但链表节点的结构 typ…
1.this指针 1)this指针是成员函数的隐式参数,成员函数通过this指针来访问调用它自己的那个对象,成员函数对各成员的访问均通过this进行 2)当某个对象调用它的成员函数时,编译器会把这个对象的地址传给这个成员函数,用这个地址初始化成员函数的this指针 3)this指针默是一个指向类类型的常量指针 2.常量成员函数 有些成员函数在使用时不需要修改数据成员的值,于是就可以在它们的参数列表后加一个const限定符(const必须同时出现在声明和定义中),让this指针被约束为指向常量的常…
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和无条件跳转. if if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事. Go里面if条件判断语句中不需要括号,如下代码所示 if x > 10 {     fmt.Println("x is greater than 10") } els…
//函数扩展--函数重载与函数指针 #include<iostream> using namespace std; //函数参数类型不同 void Fuc(char * b){ printf("%s\n",b); } //函数参数个数不同 int Fuc(int a, int b){ return a + b; } //函数参数类型不同 void Fuc2(const char * b){ printf("%s\n", b); } void main()…
strings和strconv使用 . strings.HasPrefix(s string, prefix string) bool: // 判断字符串s是否以prefix开头 . . strings.HasSuffix(s string, suffix string) bool: // 判断字符串s是否以suffix结尾. . strings.Index(s string, str string) int: // 判断str在s中首次出现的位置,如果没有出现,则返回-1 . strings.…