学习
实践
活动
工具
TVP
写文章

C语言剑客之《C专家编程》一书精华提炼

C语言的许多特性是为了方便编译器设计者而建立的。----唉,怎么这个样子 C语言的基本数据类型直接与底层硬件相对应。 这也是为什么C++语言令人失望的原因:它对C语言中存在的一些最基本问题没有什么改进,而它对C语言最重要的扩展(类)却是建立在脆弱的C类型模型上。 第3章-- 分析C语言的声明 声明器(declarator), 就是标识符以及与它组合与它组合在一起的任何指针,函数括号,数组下标等。 int几乎是C语言所有的默认方式。应该也是C最善于处理的数据类型。 int apricot[2][3][5]; // apricot 两个[3][5]的数组,2*3个[5]的数组,2*3*5个int int (*p)[3][5] = apricot; // 步长 3

1K50

C语言入门笔记3

函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数。(一个project可以有多个.c文件,但只能有一个main函数。 常见错误就是把多个题目程序代码.c放到一个工程下面,每个里面都有main函数,编译不报错,组建会报错。) C语言源程序中的函数是指完成特定数据处理任务、功能上独立的一个程序段。 /函数体 ....... return 0; //返回值 } 函数体的主要成分:变量定义序列+语句序列(VC6.0里面定义序列不能在语句序列之后) int r=5; int f=3; ; 3. 控制语句 控制语句是由特定的语句定义符组成,使用控制语句可实现程序的各种结构方式,从而实现对程序流程的控制。 C语言的九种控制语句。 3)转向语句:break语句、goto语句(尽量少使用,不利于结构化程序设计)、continue语句、return语句。 4.

33820
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    S3C2440C语言点灯

    第一代程序员使用机器码 第二代程序员使用汇编 第三代程序员使用C语言 C语言相较于汇编和机器码是一个更高级的语言,我们使用的技术也应该与时俱进 之前控制寄存器是配置GPFCON和GPFDAT寄存器 ,通过地址访问,所以可以用C语言来进行对地址的访问。 GPFCON——0x5600,0050 GPFDAT——0x5600,0054 目录 S3C2440芯片手册导读 用指针表示 代码的编写 调错 S3C2440芯片手册导读 对于GPFCON,只用到了16 表示如下: *pGPFCON = 0x100; //0x400 //配置成输出引脚 *pGPFDAT = 0; //低电平点灯 会导致 在这两个地址中把这两个数据写进去 代码的编写 在编写C语言的代码前 start.S -o start.o arm-linux-gcc -c led.c -o led.o arm-linux-ld -Ttext 0 led.o start.o -o led.elf#链接

    7310

    C语言剑客之《C陷阱与缺陷》一书精华提炼

    1、C陷阱与缺陷概述 C语言像一把雕刻刀,锋利,并且在技师手中非常有用。和任何锋利的工具一样,C会伤到那些不能掌握它的人。本文介绍C语言伤害粗心的人的方法,以及如何避免伤害。 1.1 =不是== C语言则是用=表示赋值而用==表示比较。这是因为赋值的频率要高于比较,因此为其分配更短的符号。 3 连接 一个C程序可能有很多部分组成,它们被分别编译,并由一个通常称为连接器、连接编辑器或加载器的程序绑定到一起。 因此从其它语言转到C语言的程序员应该特别小心地使用数组: int i, a[10]; for(i = 1; i <= 10; i++) a[i] = 0; 4.4 C并不总是转换实参 下面的程序段由于两个原因会失败 譬如在一些编译器中,它的输出为0 0 0 0 0 1 2 3 4。 为什么?因为c的声明是char而不是int。当你令scanf()去读取一个整数时,它需要一个指向一个整数的指针。

    41610

    C语言笔记---(3)变量篇

    1.变量名(标识符) 变量名:变量名在 C 语言里面属于标识符(identifier),命名有严格的规范。 只能由字母(包括大写和小写)、数字和下划线(_)组成。 不能以数字开头。 2.声明变量 C语言的变量,必须先声明后使用。如果一个变量没有声明,就直接使用,会报错。 每个变量都有自己的类型(type)。声明变量时,必须把变量的类型告诉编译器。 3.变量赋值 C语言会在变量声明时,就为它分配内存空间,但是不会清除内存里面原来的值。这导致声明变量以后,变量会是一个随机的值。所以,变量一定要赋值以后才能使用。 赋值操作通过赋值运算符=完成。 虽然 C语言会自动转换类型,但是应该避免赋值运算符两侧的类型不一致。 C语言的变量作用域主要有两种:文件作用域(file scope)和块作用域(block scope)。

    10120

    小白学习C语言3

    中的内容交换(数组一样大) #define _CRT_SECURT_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int a[3] ,b[3],c[3]; int i,j,k; printf("请输入第一个数组a[3]:"); for(i=0;i<3;i++) scanf("%d",%a[3]); for(j=0;j<3;j++ ) scanf("%d",%b[3]); for(k=0;k<3;k++) {c[k]=a[k];} for(i=0;i<3;i++) {a[i]=b[i];} for(j=0;j<3; j++) {b[k]=c[k];} for(i=0;i<3;i++) {printf("交换后的数组a[]为%d",a[i]);} for(j=0;j<3;j++) {printf("交换后的数组 b[]为%d",b[i]);} } system("pause"); return o; } 2.计算1/1-1/2+1/3-1/4…+1/99-1/100的值 #include<stdio.h> #include

    5620

    C语言入门基础知识3

    C编译系统使用4个连续的字节(即32位)存储在float类型数据。 在4个字节中,究竟小数部分和指数部分分别占多少位,ANSI C 本身并没有作规定,由具体的C语言编译系统自定。不少C语言编译系统用24位表示数符号和指数部分。 可用如下代码证明它们等价: #include <stdio.h> int main(){ printf("%c,%c,%c,%c", 0101, '\101', '\x41', 'A'); define 注意“边缘效应”,例:#define N 2+3, N 的值是 5。 宏的边缘效应,所以我们应该写成 #define N (2+3)。

    32120

    c语言学习之数组3

    #include <stdio.h> int main() {   char cArr[] = {'I', 'L', 'O', 'V', 'E', 'C'};   char sArr[] = "ilovec

    21410

    重写C语言string.c的部分函数(3)

    一、函数介绍 这是重写C语言string.c的部分函数的第3篇文章,前面2篇文章已经重写了下面几个函数: strdup 字符串拷贝 strchr 字符查找函数 (从头开始) strrchr 字符查找函数 比如: 查找的源字符串是 abcd 要查找的字符串还是78c,那么查找的结果返回就是c。 因为查找的字符串里c在源字符串里匹配。 所指内存区域的前n个字节查找字符c,当第一次遇到字符c时停止查找,如果成功,返回指向字符c的指针;否则返回NULL。 void *memchr(const void *s, int c, size_t n) { const unsigned char *p = s; while (n-- ! = 0) { if ((unsigned char)c == *p++) { return (void *)(p-1); } } return NULL; }

    8420

    sqlite3C语言使用(二)

    还记得我们的sqlite3_exec函数么,今天就是说一下它的扩展用法。 函数原型 int sqlite3_exec( sqlite3 *, /* An open database */ const char 其实sqlite3_exec也能执行select语句,而且也能获得返回值,其中第三个参数(是个回调函数)起到了很大作用。     回调函数,就是在sqlite3_exec执行完成后自动被调用的函数。 函数可以这么写: void AllSelect(sqlite3 * db) { char * errmsg; int rc = sqlite3_exec(db,"select * from addlist , data_column[4],data_column[5]); return 0; }     相比于之前用sqlite3_prepare、sqlite3_step要简单很多吧?

    65520

    OC学习3——C语言特性之指针

    1、指针是C语言中的一个非常重要的概念,实际上,OC系统类的变量、自定义类的变量等都是指针。定义指针变量的语法格式如下,其中*代表一个指针变量,整个语法代表定义一个指向特定类型的变量的指针变量。 6、C语言的底层没有对字符串进行定义,一般都是通过字符数组进行保存字符串。此外,还可以通过字符指针来表示字符串,即定义一个字符指针变量,然后将C格式的字符串赋给该指针变量。 char* str = "I love IOS" ; C语言的自字符串在底层依然是才用字符数组进行保存的,而str则是一个char*型的指针变量,它指向该字符数组的第一个元素,也就是指向该字符数组的首地址 当定义函数之后,C语言允许定义一个指针变量来指向该函数,然后就可以通过该指针变量来调用函数了,使用函数指针变量的语法格式步骤如下: 定义函数指针变量:函数返回值类型 (*指针变量名)(); 将任何已有的函数赋值给函数指针变量 详情可以参见数组指针和指针数组的区别 1 //指针数组的定义语法 2 类型* 变量名[长度]; 3 4 char* arr[3] ; 5 arr[0] = "hello world!"

    78780

    C语言】求1+2!+3!+...+20

    +3!...+20!=%e\n",s);   getch(); }

    36110

    3 C语言 流程控制 循环 跳转

    3 C语言 流程控制 循环 跳转 选择: if switch 循环   while,do while ,for ,嵌套  跳转 break goto continue  第3章流程控制 学习目标 u掌握选择结构语句 u掌握循环结构语句 前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。 下面来看一个顺序结构的简单例子,通过程序实现按顺序输出“我爱C语言”,如例3-1所示。 1 条件分支语句 1.1 关系运算符 在C语言中0代表假,非0代表真, 在计算机程序判断是根据一个条件返回是真还是假来做不同的操作。 &多学一招:三元运算符 在C语言中有一种特殊的运算叫做三元运算,它和if…else语句类似,具体语法格式如下: 判断条件?

    73610

    C语言程序结构3:循环结构

    循环结构可以减少代码重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环 一、for循环: for (表达式1; 表达式2; 表达式3) //小括号后面没有分号,如加分号则表示循环体是空语句{  循环体} 表达式1:循环控制变量初始化,也可以在for之前初始化(故可以为空); 表达式2:循环判断条件,满足条件执行循环体,不满足则结束循环, 为空则表示条件恒成立(应在循环体内设置break条件,否则死循环); 表达式3:循环控制变量增量(变化也可以写在循环体内 表达式1初始化有多个的话用逗号隔开;表达式3增量有多个也用逗号隔开。 三个表达式可以全为空:for(; ;) {循环体} 注:for循环()中的表达式1、3都可以省略,但标准的for循环中,应该把循环控制变量的初始化,增量都放在()当中,并且在循环体中不建议更改循环控制变量

    38820

    sqlite3C语言使用(三)

    (sqlite3_stmt*, int, double); int sqlite3_bind_int(sqlite3_stmt*, int, int); int sqlite3_bind_int64(sqlite3 _stmt*, int, sqlite3_int64); int sqlite3_bind_null(sqlite3_stmt*, int); int sqlite3_bind_text(sqlite3 *, int, void(*)(void*)); int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); int sqlite3 这些操作都是写C程序的基本素质。     我会把我这次的工程文件(包括字典pass.txt和sqlite3的库文件sqlite3.dll、sqlite3.lib、sqlite3.h)在附件里打包给大家,用VS2010建的工程,主要的代码都在sqlite_bind_test.cpp

    62310

    C语言简单说】二:第一个C语言程序详解(3

    上一个教程只说明了第一个C语言程序源码中的main(其实等于没说): 继续把源码给复制过来: #include<stdio.h> #include<stdlib.h> int main(){

    18210

    sqlite3C语言使用(一)

    0.准备工作     在代码头上加上这样一个宏定义:typedef struct sqlite3 sqlite3; 以后我们就可以将sqlite3视为一个新数据类型,表示一个sqlite3数据库句柄。 4.sqlite3_prepare 把一条SQL语句编译成字节码留给后面的执行函数(并不执行) 函数原型 int sqlite3_prepare( sqlite3 *db, /* prepare(db,sql,-1,&stmt,NULL); 5.sqlite3_step 执行编译好的sql语句,获得结果的一行 函数原型 int sqlite3_step(sqlite3_stmt* sqlite3_column_text(stmt,3),sqlite3_column_text(stmt,4),sqlite3_column_text(stmt,5)); } else { sqlite3_column_text(stmt,3),sqlite3_column_text(stmt,4),sqlite3_column_text(stmt,5)); } sqlite3_

    1.4K11

    C语言系列】C语言数组

    //正确,右边的元素确定,则个数可以省略这里为3个。 ⑤. Int ages[];//错误,编译器无法知道应该分配多少的存储空间 ⑥. Int ages[‘A’]={1,2,3};//正确,相当于是ages[65] ⑧. ages)/sizeof(int); //数组的总长度除以单个的长度等于元素个数 三、数组内存存储细节 假设有数组如下: Int x[]={1,2}; Char ca[5]={‘a’,‘A’,‘B’,‘C’ 五、二维数组 Int ages[50];//数组能够存放50个int类型的数据 Int ages1[3][10];//数组能够存放3个数组,每个数组存放10个数值,共3x10=30个述职数值。 使用场合:五子棋,俄罗斯方块等, 假设: char Y[3][2]={ {‘A’,‘B’}, {‘C,‘D’}, {‘E,‘F’} }; 内存情况: ?

    1.1K61

    unity3d C#语言基础(继承)

    3:用sealed修饰的类不能被继承。 4:子类调用父类带参构造方法的时候必须使用base,子类构造方法可以不带参数。

    14010

    C语言3-2=?3%-2=?你确定答案吗

    抛砖引玉 C语言负数除以正数,与正数除以负数或者负数除以负数的余数和商,正负有谁定呢? -3 / 2 = ?; -3 % 2 = ?; 3 / (-2) = ?; 3 % (-2) = ? 如果我们首先满足第3条性质,即余数是 1,这种情况下根据第1条性质则商是-2,那么第2条性质又无法满足了。 因此,C语言或者其他语言在实现整数除法截断运算时,必须放弃上述三条原则中的至少一条。 大多数程序设计语言选择了放弃第 3 条,而改为求余数与被除数的正负号相同。这样,性质1和性质2就可以得到满足。大多数C编译器在实践中也都是这样做的。 然而,C语言的定义只保证了性质1,以及当 a>=0 且 b>0 时,保证|r| < |b|以及 r>=0。后面部分的保证与性质2 或者性质3 比较起来,限制性弱得多。 实例论证 C 语言的定义虽然有时候会带来不需的灵活性,但大多数时候,只要编程者清楚地知道要做什么、该做什么,这个定义对让整数除法运算满足其需要来说还是够用了的。

    62761

    扫码关注腾讯云开发者

    领取腾讯云代金券