pointers on c (day 1,chapter3)
第3章 数据
c中,仅有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等)。
整型:字符、短整型和长整型,它们都分为有符号(signed)和无符号(unsigned)。
short int至少16位,long int至少32位。
ANSI C允许命名常量(named constant, 声明为const的变量),它被初始化后值就不能改变。
如何把一个值当作字符常量使用:
value = value - 48;
value = value - \60;
value = value - '0';
枚举类型
枚举(enumerated)类型就是指它的值为符号常量而不是字面值类型:
enum Jar_Type{CUP,PINR,QUART,HALF_GALLON,GALLON};
enum Jar_Type milk_jug, gas_can, medicine_bottle;
==
enum {CUP, PINT, QUART, HALF_GALLON, GALLON} milk_jug,gas_can,medicine_bottle;
这种类型的变量实际上以整型的方式存储,这些符号名的实际值都是整型值。这里CUP是0,PINT是1,以此类推。
你可以为这些符号名指定特定的整型值。
enum Jar_Type{CUP = 8, PINT = 16, QUART = 32, HALF_GALLON = 64, GALLON = 128};
只对部分符号名用这种方式进行赋值也是合法的。如果某个符号名未显式指定一个值,那么它的值就比前面一个符号名的值大1。
浮点类型
浮点数家族包括float、double和long double类型。
浮点数面值在缺省的情况下都是double类型的,除非它的后面跟一个L或l表示它是一个long double类型的值,或者跟一个F或f表示它是一个float类型的值。
指针
变量的值存储于计算机的内存中,每个变量都占据一个特定的位置。每个内存位置都由地址唯一确定并应用。指针只是地址的另一个名字罢了。指针变量就是一个其值为零一个(一些)内存地址的变量。
一、指针常量(pointer constant)
指针常量与非指针常量在本质上是不同的,因为编译器负责把变量赋值给计算机内存中的位置,程序员事先无法知道某个特定的变量将存储到内存中的那个位置。因此,你通过操作符获得一个变量的地址而不是直接把它的地址写成个字面值的常量形式。例如,如果我们希望知道变量xyz的地址,我们无法书写一个类似oxff2044ec这样的字面值,因为我们不知道这是不是编译器实际存官方这个碧昂两的内存位置。事实上,当一个函数每次被调用时,他的自动变量(局部变量)可能每次分配的内存位置都不相同。因此,把指针常量表达为数值字面值的相识几乎没有用处。
二、字符串常量(string literal)
C语言不存在字符串类型。
ANSI C申明如果对一个字符串常量进行修改,其效果是未定义的。
是因为在程序中使用字符串常量会生成一个"指向字符的常量的指针"。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。
下面两个效果等价:
unsigned short int a;
unsigned short a;
int 在默认情况下是有符号的。
C数组另一个值得注意的地方是,编译器并不检查程序对数组下标的引用是否在数组的合法范围内。
如果下标值是从那些已知是正确的值计算得来,那么就无需检查它的值。如果一个用作下标的值是根据某种方法从用户输入数据产生而成,那么在使用它之前必须进行检测,确保它们位于有效的范围之内。
声明指针
int *a;
==
int* a;
但是 int* a,b,c;
!=
int *a,*b,*c;
typedef
C语言支持一种叫做typedef的机制,它允许你为各种数据类型定义新名字。
char *ptr_to_char;
ptr_to_char是字符指针;
typedef char *ptr_to_char;
ptr_to_char a;
声明a是一个指向字符的指针。
提示:
你应该使用typedef而不是#define来创建新的类型名,后者无法正确处理指针类型。
#define d_ptr_char char*
d_ptr_to_char a,b;
b无法声明称一个指针。
常量
const int a;
pointers on c (day 1,chapter3)的更多相关文章
- Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II
题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...
- Leetcode 笔记 116 - Populating Next Right Pointers in Each Node
题目链接:Populating Next Right Pointers in Each Node | LeetCode OJ Given a binary tree struct TreeLinkNo ...
- [LeetCode] Populating Next Right Pointers in Each Node II 每个节点的右向指针之二
Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...
- [LeetCode] Populating Next Right Pointers in Each Node 每个节点的右向指针
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- [c++] Smart Pointers
内存管理方面的知识 基础实例: #include <iostream> #include <stack> #include <memory> using names ...
- LEETCODE —— Populating Next Right Pointers in Each Node
Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeLinkNode * ...
- LeetCode OJ 116. Populating Next Right Pointers in Each Node
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
- Pointers and Dynamic Allocation of Memory
METHOD 1: Consider the case where we do not know the number of elements in each row at compile time, ...
- LeetCode - Populating Next Right Pointers in Each Node II
题目: Follow up for problem "Populating Next Right Pointers in Each Node". What if the given ...
随机推荐
- Charles抓Android的数据包
1. 获得Mac OS的IP地址 2. 对Android手机设置代理,主机IP是步骤1中获得的IP,端口8888
- krpano
调试: krpano的场景下方,有一个Console面板可以用来输出即时日志. 可以使用 showlog(true); 来设置打开此功能,默认是关闭的. 这样就可以把下面三种日志实时显示出来了: tr ...
- 什么是Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- 微信公共服务平台开发(.Net 的实现)12-------网页授权(上 :更加深入理解OAuth2.0 )
我们首先来认识一下OAuth协议吧,这个东西很早就听说过,总觉得离我很远(我的项目用不到这些),但是最近不得不学习一下了.我在网上找了一些解释,认为解释的最好的是这样说的(出处:http://hi.b ...
- shell--1.shell 相关及变量
1.shell脚本解释器 Bourme Shell (/usr/bin/sh 或 /bin/sh ) Bourme Again Shell ( /bin/bash ) C Shell ( /usr/b ...
- C和指针 第十一章 习题
1编写calloc,内部使用malloc函数获取内存 #include <stdio.h> #include <stdlib.h> void *myAlloc(unsigned ...
- Hibernate参数一览表
参考文章地址:http://www.blogjava.net/i369/articles/194855.html Hibernate 参数设置一览表 属性名 用途 hibernate.dialect ...
- 将 VMware 最小化到系统托盘
1, 下载 Trayconizer官网地址: http://www.whitsoftdev.com/trayconizer/下载地址: http://www.whitsoftdev.com/files ...
- W7无法更新
从提示中可以推断可能服务中没有启动更新服务,当即开始>>>运行>>>services.msc 打开服务管理,找到Windows Update服务,启动它.重新更新服 ...
- C#实现K-MEDOIDS聚类算法
1.任意选取K个对象作为初始聚类中心(O1,O2,…Oi…Ok). 2)将余下的对象分到各个类中去(该对象与哪一个聚类中心最近就被分配到哪一个聚类簇中): 3)对于每个类(Oi)中,顺序选取一个Or, ...