C和指针读书笔记(第三章)

1. 整形:字符,短整型,整型,长整型,分为有符号和无符号两种。
长整型至少应该和整型一样长,整型至少应该和短整型一样长。


2. 当一个字符串常量出现于一个表达式中,表达式所使用的值就是这些字符串存储的地址,而不是这些字符本身。因此可以把字符串常量赋值给一个“指向字符的指针”吗或者指向这些字符所存储的地址,但是不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针。


3. 说明符可能是一些用于修改变量的长度或者是否为有符号数的关键字,如:short,long,signed,unsigned
同时在声明变量时,如果声明中已经至少有了一个其他的说明符,关键字int可以省略。例中的两个声明是等同的。
例3.1

unsigned short int    a;
unsigned short        a;

4. 创建新的类型名应该使用tyoedef而不是#define,因为后者无法正确的处理指针类型,例4.1中可以正确声明a,但是b却被声明为一个字符。在定义更复杂的类型名字时,如函数指针或指向数组的指针,使用typedef更合适。
例4.1

#define d_ptr char *;
d_ptr a, b;

5. 指针常量和常量的定义(const)
声明常量:

const int a;
int const a;    //这两种方法都可以

声明有初始值的常量:
方法一:

int const a = 7;
//在函数中声明为const的形参在函数被调用时会得到实参的值。
//涉及指针变量时有多种声明方法
int *pi;    //普通的指向整型的指针
int const *pi;  //创建一个指向整型常量的值,可以修改指针的值,但不能修改所指向的整型的值
int * const pi; //声明一个指向整型常量的值。指针时常量,值无法修改,但可以修改它所指向的整型的值
int onst * const pi;    //指针本身和所指向的值都是常量,不允许更改

方法二:

//使用#define创建名字常量
#define MAX_ELE 50
int const MAX_ELE = 50;

在这种情况下,使用#define比const更好,因为只要允许使用字面值常量的地方都可以使用前者,比如声明数组长度。而const变量只能使用于允许使用变量的地方。


6. 链接属性一般有三种:external 外部, internal 内部,none 无。
none链接属性的标识符总是被当作单独的个体,也就是说该标识符的多个声明被当作不同的实体。
internal链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件中的声明则分属不同的实体。
external链接属性的标识符不论声明多少次,位于几个源文件都表示同一个实体。

typedef char *a;  
int b;  
int c(int d)  
{  
    int e;  
    int f(int g);  
}  

缺省情况下b,c,f的链接属性是external,其余的标识符链接属性则为none。则另一个源文件如果也包含了标识符b的类似声明并调用函数c,那它们实际上访问的是这个源文件所定义的实体。f的链接属性之所以是external是因为它是个函数名。在这个源文件中调用函数f,它实际上将链接到其他的源文件所定义的函数,甚至这个函数的定义可能出现在某个函数库。


7.
static(可以用来修饰局部变量,全局变量以及函数)

  • 一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。
  • 对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)
  • 用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域

extern
extern是全局变量声明,只要声明全局变量就默认前面加extern。若本文件引用别的文件中的全局变量,一定要加上extern声明一下,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。
本条参考网址:http://www.cnblogs.com/dolphin0520/archive/2011/04/20/2022701.html


8. (P43-46)数据的作用


9.
作用域、链接属性和存数类型总结
注释

  • 存储于堆栈的变量只有当该代码处于活动期间才能保持自己的值,当程序的执行流离开代码块时,这些变量的值将丢失
  • 未存储于堆栈的变量在程序开始执行时创建,并在整个程序执行期间一直保持其值,不管是全局变量还是局部变量

10. 编程提示的总结:

  • 为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围之内,或者不要在字符上执行算术运算。
  • 不要把整型值和枚举值放在一起使用。
  • 定义类型的新名字时,使用typedef而不是#define
  • 用const声明其值不会修改的变量。
  • 不要在嵌套的代码块之间使用相同的变量名。
  • 除了实体的具体定义为之外,在它的其他声明位置都使用extern关键字。

2016.9.25

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值