打印

【转】C和指针 (pointers on C)——3

[复制链接]
1575|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elecintop|  楼主 | 2014-7-26 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

总结:

具有external链接属性(包括external、internal、None)的实体在其他语言的术语里称为全局实体(global),所有cpp里的函数都可以访问它。

只要声明的时候在函数体或代码块外部(包括main函数),默认的链接属性都是external。

如果声明的在代码块内部,说明它引用的是一个全局变量。

具有external链接属性的实体总是具有静态存储类型(auto,static)。静态存储类型的数据在程序开始前就会创建,并在程序整个执行过程中始终存在。局部变量相反,在函数运行时才能创建。


相关帖子

沙发
elecintop|  楼主 | 2014-7-26 21:10 | 只看该作者
本帖最后由 elecintop 于 2014-7-26 21:15 编辑

自动存储的原因:
1、减少内存总占有量。
2、在堆栈上分配可以有效地解决递归问题。

使用特权

评论回复
板凳
elecintop|  楼主 | 2014-7-26 21:15 | 只看该作者
警告:
1、在声明指针变量时候采用容易误导的写法。
Int *a, *b, *c;//good
Int * a,b,c//只有a是指向int的指针

使用特权

评论回复
地板
elecintop|  楼主 | 2014-7-26 21:17 | 只看该作者
2、误解指针声明中初始化的含义。
Char*message = “hello world!“//其实赋值给了message,而不是*message
相当于:
Char *message;
Message =“hello world!”

使用特权

评论回复
5
elecintop|  楼主 | 2014-7-26 21:17 | 只看该作者
3、不要依赖隐式声明,显式声明更清楚的表达程序的意图。
枚举类型最好显式得定义一个整型的值,默认第一个字符的整型值为0,后面的值比前面的符号名的值大1,以此类推
Enum week{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};//Monday=0
Enum week{Monday= 1, Tuesday = 2…};

使用特权

评论回复
6
elecintop|  楼主 | 2014-7-26 21:18 | 只看该作者
4、在定义类型的新名字时,使用typedef而不是#define。
优势显而易见,当#define来创建新的类型名时,后者无**确地处理指针类型。
#defined_ptr_to_char char *
d_ptr_to_chara, b;
就像int* a, b;一样,正确声明了a,但是b却被声明成了一个字符。

使用特权

评论回复
7
elecintop|  楼主 | 2014-7-26 21:19 | 只看该作者
5、使用const声明可以避免变量发生变化。
Int const  *ptr; //声明一个指向整型常量的指针
Int *const  ptr;//声明一个指向整型的指针常量
Int const *const ptr; //声明一个指向整型常量的指针常量

使用特权

评论回复
8
elecintop|  楼主 | 2014-7-26 21:19 | 只看该作者
6、使用名字常量而不是字面值常量
如:#define MAX_ELEMENT 50
       Intconst MAX_ELEMENT = 50;
前者是名字常量可以定义数组长度,而后者属于字面值常量,不能定义数组长度。

使用特权

评论回复
9
elecintop|  楼主 | 2014-7-26 21:19 | 只看该作者
7、不要在嵌套的代码块之间使用相同的变量名。

使用特权

评论回复
10
elecintop|  楼主 | 2014-7-26 21:20 | 只看该作者
8、除了实体的具体定义位置之外,在它的其他声明位置都使用extern关键字

使用特权

评论回复
11
elecintop|  楼主 | 2014-7-26 21:20 | 只看该作者
问题15
假定函数a声明了一个automatic的变量x,你可以在其他的function内访问x,只要你使用了下面这样的声明。
extern intx;
对还是错?如果x被声明为static,对还是错?
答:都错。变量只能在自己的作用域访问,不能在其他作用域访问,x的作用域就是他的a函数。Static只是改变了它的存储类型。

使用特权

评论回复
12
2hawer| | 2014-7-27 07:30 | 只看该作者
这本书个人感觉主要讲指针在大程序中的应用,比如操作系统.不建议直接看,在通读过ucos操作系统源代码后再来看就一目了然了.不过该本书可以用来鉴别你c语言是否入门.

使用特权

评论回复
13
elecintop|  楼主 | 2014-7-27 08:45 | 只看该作者
2hawer 发表于 2014-7-27 07:30
这本书个人感觉主要讲指针在大程序中的应用,比如操作系统.不建议直接看,在通读过ucos操作系统源代码后再来 ...

看来我得c语言远远没入门

使用特权

评论回复
14
angerbird| | 2014-8-8 22:20 | 只看该作者
具有external链接属性(包括external、internal、None)的实体在其他语言的术语里称为全局实体(global),所有cpp里的函数都可以访问它。

使用特权

评论回复
15
angerbird| | 2014-8-8 22:20 | 只看该作者
很惭愧这些基础性知识的啊,都忘得差不多了。

使用特权

评论回复
16
angerbird| | 2014-8-8 22:22 | 只看该作者
具有external链接属性的实体总是具有静态存储类型(auto,static)。静态存储类型的数据在程序开始前就会创建,并在程序整个执行过程中始终存在。局部变量相反,在函数运行时才能创建。

使用特权

评论回复
17
firstblood| | 2014-8-17 21:04 | 只看该作者
具有external链接属性的实体总是具有静态存储类型(auto,static)。静态存储类型的数据在程序开始前就会创建,并在程序整个执行过程中始终存在。局部变量相反,在函数运行时才能创建。

使用特权

评论回复
18
shenmu2012| | 2014-8-18 23:09 | 只看该作者
具有external链接属性(包括external、internal、None)的实体在其他语言的术语里称为全局实体(global),所有cpp里的函数都可以访问它。

使用特权

评论回复
19
缘分之外| | 2014-9-27 18:00 | 只看该作者
谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

1329

帖子

3

粉丝