数组、指针、字符串
2016-01-19 20:04
197 查看
1、数组
2、内存地址
3、指针变量
4、单个字符的输入输出
5、字符串
6、字符串操作函数
7、辨析
8、二维字符串数组及多维数组
9、二维数组初始化:
10、指针数组
则 *(p+1)等于元素 a[0][1] 的值
则 (p+1)等于一维数组名(起始地址),(p+1)+1 等同于 a[1]+1,则 ((p+1)+1) 等同于 a[1][1]
11、函数指针
12、二级指针
数组元素个数必须是一个固定的值,可以是整形常量、符号常量及整形常量表达式 数组下标可以是整形常量、整形变量或者整形表达式 数组可以全部初始化,此时元素个数可以省略;也可部分初始化,元素个数不可省略 数组初始化的赋值方式只能用于数组的定义,定义之后再赋值只能一个一个元素赋值
2、内存地址
计算机内存是以字节为单位的存储空间,内存的每一个字节都有一个唯一的编号,这个编号就是地址。当C程序中定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量,程序对变量的读取操作,实际上是对变量所在地址存储空间进行读取或写入数据。 直接引用:通过变量名引用变量(系统自动将变量名转换为变量的存储地址) 间接引用:将变量的地址存放在一个变量中,然后通过存放变量地址的指针变量来引用该变量
3、指针变量
一个变量的地址称为该变量的指针 用来存放一个变量地址的变量称为指针变量 指针变量定义的一般形式为:类型名 * 指针变量名 注:变量名前面的 "*"是一个说明符,用来说明该变量是一个指针变量,不能省略,但不是变量名的一部分 类型名表示指针变量所指向的变量类型,而且只能指向这种类型的变量 指针变量相关运算符: & 取地址运算符 * 指针运算符,取内容 注:指针变量用来存放地址,故不能给指针变量赋常数值 指针变量没有指向明确的地址前,不能对它所指向的对象赋值 对指针进行加1操作,会使指针指向下一个元素 示例:指向 int 型数据的指针加1,其指向的地址加4 指向 char 型数据的指针加1,其指向的地址加1 理解关键: 将指针的类型分为两个概念,一个是指针自身的类型,一个是指针指向数据的类型
4、单个字符的输入输出
getchar( ):从输入设备中读取一个字符 例: char c = getchar( ); 等价于 scanf_s("%c",&c,1); 注:getchar()可以接收回车字符,而scanf()将回车作为数据的间隔符或结束符,且getchar()接收的字符可以不赋给任何变量 putchar( ):将一个字符输出到输出设备 例: char c = ‘a’; putchar(c); putchar()可以输出字符型变量、整型变量、字符型常量以及控制字符和转义字符 比较:putchar()一次只能输出一个字符,而printf()一次能输出多个字符
5、字符串
在C语言中,字符序列当作字符串处理,字符串的处理基于字符数组,字符串在存储时其尾部添加结束标志‘\0’('\0'代表ANSI码为0的字符,是一个空操作符) 字符串初始化方式: char c[10] = {"Hello world"}; char c[10] = "Hello world"; char c[ ] = "Hello world"; char c[9]; scanf("%s",&c,sizeof(c));
6、字符串操作函数
puts( ):字符串输出 gets( ):字符串输入 strlen( ):计算字符串长度 strcat( ):字符串连接 strcmp( ):字符串比较
7、辨析
sizeof( ):计算字节数,包含 '\0' strlen( ) :计算字符串实际长度,不包含 '\0' coutof( ):计算字符数组元素个数,包含 '\0' 三者都将空格计入总数
8、二维字符串数组及多维数组
一维字符数组存放一个字符串 二维字符串数组存放多个字符串 多维数组可看作是比其少一个维度的数组的集合 注:二维及二维以上的多维数组,都是先存放低维数据,以此类推
9、二维数组初始化:
理论依据:数组元素在内存中线性存放 全部初始化时,按数组存储顺序赋初值 部分初始化时,高维元素个数可省略,低维元素个数不可省略。但是,要在初始化时体现出高维元素个数,即体现出一维数组个数
10、指针数组
不带下标的二维数组名表示二维数组的起始地址,进行加法操作时则表示作为其元素的一维数组的起始地址 不带下标的一维数组名表示一维数组的起始地址,进行加法操作时则表示该一维数组一个元素的起始地址 即,加法操作时数组降维 例: int a[3][4],*p; p = a[0]; 此处p指向一维数组a[0]的起始地址,对其进行加法操作时 p+1 等同于 a[0]+1 ,此时 a[0] 降维至 a[0][0],故其指向数组元素 a[0][1],
则 *(p+1)等于元素 a[0][1] 的值
int a[3][4],(*p)[4]; p = a; 此处p指向二维数组a的起始地址,对其进行加法操作时 p+1 等同于 a+1,此时 a 降维至 a[0],故其指向数组元素 a[1],
则 (p+1)等于一维数组名(起始地址),(p+1)+1 等同于 a[1]+1,则 ((p+1)+1) 等同于 a[1][1]
11、函数指针
函数在内存中占有一片连续的内存区域保存其二进制代码,而函数名在C语言中代表这片连续的内存区域的首地址,故函数名可用指针替换 指向函数的指针变量的一般形式为: 数据类型 (*指针变量名) (形参表列) 例: int (*MyFun) (int,int) 数据类型即函数返回值类型 形参表列即函数形式参数表列
12、二级指针
指针本身也是变量,因此也有自己的地址。 我们可以将一个指针变量分为两个部分,一部分存放变量的地址,另一部分是其自身的地址。了解这一点,二级指针的概念就比较容易理解了。 故二级指针就是在一级指针的基础上再增加一个指针,用来存放一级指针的地址,而其本身也有自己的地址,依此类推
相关文章推荐
- XHR——XMLHttpRequest对象
- Codeforces 196 C. Paint Tree
- JavaSE-==和equals()
- HDU 4869 Turn the pokers(思维+组合公式+高速幂)
- 通过/proc/net/dev分析网络包量,流量,错包,丢包
- 四大组件-----Service的后台下载(三)
- 浅谈Java类的实例化
- Netty-Mina深入学习与对比
- [转载]TFS与Project、Excel同步
- 记录一次Quartz2D学习(二)
- makefile静态库 动态库
- P20 (*) Remove the K'th element from a list.
- hdu2868 Neighbor Friend
- P20 (*) Remove the K'th element from a list.
- Java中的static详解
- 偷来一波正则表达式
- Androidx学习笔记(6)--常见布局--线性布局
- IBM之MQ使用指南
- 设计模式之禅之设计模式-装饰者模式
- 谭浩强c++第五章数组