/*******************************************************************************
——笔记
1. 函数申明的书写。
可以省略参数名称,只保留参数类型,但最好不要省略形参名称,他们常可以
向程序员传递一些有用的信息。
char * strcpy(char * dst, char * src); 2. const 易于被混淆的部分说明
const int limit = 10;
limit = 7; // [Error] assignment of read-only variable 'limit'
关键字 const 并不是将一个变量转换成一个常量,而是在一个变量前加一个限制
符,表示这个变量的值不能被修改。即 const 并不表示一个常量,可用 switch
语句验证,例如:
const int two = 2;
int i;
switch (i)
{
case 1:
case two: // integral constant expression expect
default:
;
} // 这是在书上说的,我使用Dev验证时没有报错。。。。。。。 int limit = 10;
const int * limitp = & limit;
int i = 27;
limitp = &i;
*limitp = 1; // [Error] assignment of read-only location '* limitp'
这段代码中 limitp 表示一个指向常量类型的指针,这个指针不能用于修改这个整
型的值,但指针本身的值可以改变 3. 使用无符号类型的建议
尽量不要使用无符号类型,以免增加不必要的复杂性。
只有在使用位段和二进制掩码时,才可以使用无符号数,应该在表达式中使用强制
类型转换,使操作数均为有符号数或无符号数,这样就不必由编译器来选择结果的
类型。 4. 字符串处理函数 strlen 求解结果不会包括一个用于存放 '\0' 的额外空间。
malloc(strlen(str)); 是错误的
malloc(strlen(str) + 1); 才是对的 5. C语言运算次序的问题
由于运算符的优先级与结和性的判断问题,最好按照程序员所需要运算步骤,牢
记 * \ 优先级高于 + - ,涉及其他运算符时一律加上括号()。 6. 变量的声明与类型的声明分开,便于增加代码的可读性
struct veg
{
int hah;
double heh;
char ch;
};
struct veg onion, pear; 7. 操作typedef
不要为了方便起见对结构体使用typedef,这样做的唯一好处是使你不必写struct关
健字,但这个关健字会向你提供一些提示信息,你不应该省略它。
typedef应该被用在:
数组,结构,指针以及函数的组合类型。
或者在可移植类型中,这样当把这段代码移植到不同平台时,要选择正确的类型时,
只需要在typedef中修改,无需对每个声明都加以修改。
typedef也可以为后面的强制类型转换提供一个简单的名字。 8. == 与 = 在判断语句中的使用
防止 == 与 = 因笔误导致的错误,在使用 == 号时,将常量放在左边,如果不小心
将 == 写生 = ,编译器会提示常量无法被赋值。 9. 使用define时宏名使用大写 10. int char 等关健字所修改的是它们右边紧邻的项目,而 const 和 volatile 类型
修饰符所修改的是它们左边紧邻的项目。 11. 使用 ?: 来表示简单的 if else 语句,这样可以简化代码,并且保持引用的局
部性。但是千万不要在一个条件操作符内嵌套另一个条件操作符。如果这样做,可能会
发现要想明白代码的确切意思变得十分困难。 12. 数组的声明就是数组,指针的声明就是指针,两者不能混淆。但在使用数组在表达
式中时,数组总是可以写成指针的形式,两者可以互换。
如:extren char a[]; 不能改成指针的形式。
数组和指针在编译器处理时是不同的,在运行时的表示形式也不一样,并可能产生不同
的代码。对编译器来言,一个数组就是一个地址,一个指针就是一个地址的地址。应该
根据实际情况作出选择。
在表达式中,它们是可以互换的,因为它们在编译器里的最终形式都是指针,并且都可
以进行取下标操作。
在下列情况下,对数组的引用不能使用指向该数组的第一个元素的指针代替
(1)数组作为sizeof()的操作数,显然此时需要的是整个数组的大小,而不是指向
第一个元素的指针的大小。
int arry[5];
int cnt = sizeof(arry); // 20
printf("cnt = %d\n", cnt);
int * p = arry;
int j = sizeof(p); // 8
printf("j = %d\n", j); (2)使用取地址操作符取数组的地址。
(3)数组是一个字符串常量初始值。 13. 数组名是一个不可修改的左值。 14. 数组的初始化
元素类型为int型 如果数组的长度比提供的初始值个数要大,剩余的元素会被初始化为0
float 为 0.0 指针类型为 NULL int arr1[5] = {1, 2};
float arr2[5] = {1.0, 2.0};
int i;
for (i = 0; i < 5; ++i)
{
printf("%-3d", arr1[i]);
}
printf("\n");
for (i = 0; i < 5; ++i)
{
printf("%f ", arr2[i]);
}
printf("\n");
int * arr3[5] = {&arr1[0], &arr1[1]};
if (NULL == arr3[2])
printf("NULL !\n"); 输出结果:
1 2 0 0 0
1.000000 2.000000 0.000000 0.000000 0.000000
NULL ! 15. 将字符串拷贝到字符数组时,定义的数组长度需要时strlen(string) + 1
字符串结尾为'\0'. ********************************************************************************/

C语言细节笔记1的更多相关文章

  1. C语言细节笔记2

    C语言常见问题笔记:    1. 指针的声明     char * p1, p2;  p1 是一个指向char类型的指针,而p2是一个char类型变量  这是由于 * 并不是基本类型的一部分,而是包含 ...

  2. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  3. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  4. JavaScript语言精粹笔记

    JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取 ...

  5. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  6. C语言细节——献给初学者(二)

    C语言细节——献给初学者(二) 主题  循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...

  7. C语言细节——献给入门者(一)

    C语言细节——献给入门者(一) 主题  输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...

  8. c语言的笔记

    下面把我这半年来记的一些C语言的笔记贴出来. 1  C语言中函数参数传递是按照“值传递”进行的,即单向传递. 2  函数原型:函数类型 函数名(参数类型,参数类型……),可以不必加参数名,因为操作系统 ...

  9. C语言盲点笔记1

    寥寥数笔,记录我的C语言盲点笔记,仅仅为以前经历过,亦有误,可交流. 1.int* a和int *a有差别吗? 没有不论什么差别,都表示a是int指针 建议这么写int *a;这样明显一点 理由例如以 ...

随机推荐

  1. UVa-340-猜数字

    #include <stdio.h> char ans[1000],gus[1000]; int num[10]; int main() { int n,cnt=1; while (sca ...

  2. Dijkstra算法简单实现(C++)

    图的最短路径问题主要包括三种算法: (1)Dijkstra (没有负权边的单源最短路径) (2)Floyed (多源最短路径) (3)Bellman (含有负权边的单源最短路径) 本文主要讲使用C++ ...

  3. (15) openssl签署和自签署证书的多种实现方式

    1.采用自定义配置文件的实现方法 1.1 自建CA 自建CA的机制:1.生成私钥:2.创建证书请求:3.使用私钥对证书请求签名. 由于测试环境,所以自建的CA只能是根CA. 所使用的配置文件如下: [ ...

  4. ES5的数组方法

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array Array.prot ...

  5. 条款7:为多太基类声明virtual析构函数

    NOTE: 1.polymorphic(多态性质的)base classes 应该声明一个virtual 析构函数.如果class带有任何virtual函数,它就应该拥有一个virtual析构函数. ...

  6. Python中的数据类型常见方法

    list() 方法 1.cmp(list1, list2):#比较两个列表的元素 2.len(list):#列表元素个数 3.max(list):#返回列表元素最大值 4.min(list):#返回列 ...

  7. 【02】koala编译中文出错(已放弃不用)

    http://koala-app.com/index-zh.html koala 下载地址.     sass.中文编译出错: 打开 Koala文件夹位置->rubygems->gems- ...

  8. Fidder详解-工具简介(保存会话、decode解码、Repaly、自定义会话框、隐藏会话、会话排序)

    前言 本文会对Fidder这款工具的一些重要功能,进行详细讲解,带大家进入Fidder的世界,本文会让你明白,Fidder不仅是一个抓包分析工具,也是一个请求发送工具,更加可以当作为Mock Serv ...

  9. 道路游戏(洛谷 P1070)

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...

  10. HDU 3763 CDs

    http://acm.hdu.edu.cn/showproblem.php?pid=3763 题意: 两组数据 看重复的有多少 如果每输入一个就去查找的话O(n^2) 会超时 所以可以用二法 第一组数 ...