博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《POINTERS ON C》(基于ANSI C)知识点及附带问题(三)
阅读量:5058 次
发布时间:2019-06-12

本文共 1628 字,大约阅读时间需要 5 分钟。

1、C语言只有4种基本的数据类型——整型、浮点型、指针和聚合类型(数组和结构等),其他类型都是由这4种派生而来。对于整型值来说,长整型至少应该跟整型一样长,而整性至少应该跟短整型一样长。(ANSI C并没有规定长整型必须比短整型长,只是规定不能比它短)。所有的浮点类型至少能容纳从-10^37到10^37之间的任何值。

 

2、以下说明了各种整型变量的最小允许范围(考虑到各个环境中的可移植性问题):

 

类型                                                              最小范围

char                      0到127

signed char                    -127到127

unsigned char                  0到255

short int                   -32767到32767

unsigned short int               0到65535

int                      -32767到32767

unsigned int                  0到65535

long int                 -2147483647到2147483647

unsigned long int               0到4294967295

 

3、当可移植性问题比较重要时,字符是否为有符号数就会带来两难的境地.最佳的妥协方案就是把存储于char型变量的值限制在signed char和unsigned char的交集里,可以最大程度的获得可移植性同时不牺牲效率.而且只有当char型变量显式声明为signed或unsigned时,才能进行算术运算.

 

4、C语言如此流行的一个重要原因就是指针,其可以有效的实现高级结构,也由于C没有诸如不允许在指针上执行算术或比较操作,不允许以任何方式创建指向已经存在的数据对象的指针之类的限制,所以能用C写出更为紧凑和有效的程序。也正是因为对指针的使用不加限制,指针也成为了很多奇葩错误的根源。变量在计算机(内存)中占据特定位置,而每个位置由地址唯一确定并加以引用,指针其实是地址的另一个名字。而指针变量就是存储的内容为地址的变量。

 

5、指针常量与非指针常量(字面值)在本质上不同,因为我们无法在知道计算机在内部将分配哪段存储空间(地址)给变量,而且在被函数调用时,自动变量(局部变量)可能每次分配的内存位置也不相同,所以C语言内部出了NULL指针,没有特地定义这个概念。

 

6、对于指针的声明,其形式如下:

(类型)*(变量名);

int* a;int * a;int *a;

从理论上来说,这三种声明方式都是正确的,而且int* a看上去更加清楚,即a被声明为类型为int*的指针,但是并不推荐这样声明,看看下面的语句吧:

int* a, b, c;

是不是很自然的以为这条语句把所有的三个变量声明为指向整型的指针?但其实只是声明了一个变量指向整型,两个整型变量。而要声明三个指向整型的指针,正确的语句如下:

int *a, *b, *c;

但是这类的声明在初始化的时候有可能会产生误解,即把值赋给*a,而事实上是给a。

 

7、当常量涉及到指针变量时,会变得很有趣,因为指针变量以及它指向的实体,都有可能成为常量,有如下几种形式:

(一)指向常量的指针

int const *pi;

其表示声明了一个指向整型常量的指针,可以修改指针的值(其他变量的地址),但是不能修改它指向的值。

(二)指向变量的常量指针

int * const pi;

此时指针是常量,不能修改指针的值,但是可以修改其指向的整型变量的值。

(三)指向常量的常量指针

int const * const pi;

此时无论指针还是其指向的值都是常量,都不允许被修改。

转载于:https://www.cnblogs.com/yu-tao/p/8401708.html

你可能感兴趣的文章
STL——配接器、常用算法使用
查看>>
第9课 uart
查看>>
Range和xrange的区别
查看>>
BZOJ 1010 [HNOI2008]玩具装箱 (斜率优化DP)
查看>>
java-动态规划算法学习笔记
查看>>
STL容器之vector
查看>>
Linux 内核中断内幕
查看>>
DNS负载均衡
查看>>
无法向会话状态服务器发出会话状态请求
查看>>
数据中心虚拟化技术
查看>>
Oracle OEM 配置报错: No value was set for the parameter DBCONTROL_HTTP_PORT 解决方法
查看>>
01入门
查看>>
python正则表达式
查看>>
嵌套循环连接(nested loops join)原理
查看>>
shell统计特征数量
查看>>
复习文件操作
查看>>
C#Hashtable与Dictionary性能
查看>>
10个让你忘记 Flash 的 HTML5 应用演示
查看>>
8个Python面试必考的题目,小编也被坑过 ToT
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>