C语言基础 9 指针 字符串

来源:互联网 发布:网络出租屋用什么网络 编辑:程序博客网 时间:2024/06/05 14:27
指针和存储区的捆绑关系可以随着程序的执行不断变化
这个时候可以把指针看作是存储区的某种身份,利用指针可以实现针对身份编程

如果指针和数组中第一个存储区捆绑就可以用这个指针表示数组里的每个存储区,这个时候可以认为指针间接捆绑了数组里的每个存储区,在这个指针的后边使用下标就可以表示数组里的存储区了

地址数据可以参与如下计算过程
地址 + 整数   地址 - 整数   地址 - 地址
地址数据加减整数n实际上加减的并不是n而是n个捆绑存储区的大小
地址减地址得到一个整数,这个整数表示两个地址之间包含的捆绑存储区个数

数组里第一个存储区的地址加下标可以得到下标对应存储区的地址
可以采用如下方法表示数组里的存储区
*(arr + num)

所有跨函数使用存储区都是通过指针实现的,被调用函数把一个存储区的地址作为返回值使用可以让调用函数使用它的存储区,被调用函数需要提供一个指针类型存储区记录作为返回值的地址,不可以把局部变量的地址做为返回值使用

数组做形式参数的时候真正的形式参数就是一个指针,这个时候可以让被调用函数使用调用函数分配的存储区

声明指针变量时可以使用const关键字
如果const关键字写在类型名称前就表示不可以通过指针对捆绑存储区做赋值,但是可以对指针本身做赋值

如果函数不会修改指针形式参数捆绑存储区的内容就应该在声明指针形式参数的时候按上面的方法加const关键字

如果把const关键字写在指针变量名称前就表示不可以对指针本身做赋值但是可以对指针捆绑的存储区做赋值

声明指针的时候可以使用void作为类型名称
这种指针叫做无类型指针
这种指针可以和任意类型的存储区捆绑,不能通过这种指针本身知道捆绑存储区的类型
在程序中不应该在无类型指针前使用*操作符,也不应该用这种指针加减整数
这种指针使用前必须强制类型转换成有类型指针

无类型指针通常作为形式参数使用,可以利用它们把任意类型的存储区从调用函数传递给被调用函数

C语言里所有文字信息必须记录在一组连续的字符类型存储区里,所有文字信息必须以'\0'字符做结尾,这个字符的ASCII码就是数字0
符合以上两个特征的内容就可以用来在C语言程序中代表文字信息,他们叫做字符串
字符串里'\0'字符前面的部分是有效字符,所有字符串都可以用字符类型指针表示

字符串字面值是一种字符串,用两个双引号
    中间包含的一组字符表示。
    (例如"abc", "%^&*"等)
编译器在编译的时候会自动在字符串字面值后面加上'\0'字符
编译器在编译的时候会把字符串字面值替换成第一个字符所在存储区的地址
字符串字面值的内容在程序执行过程中不可以修改
内容一样的字符串字面值在程序执行过程中只有一份
多个连续的字符串字面值会被合并成一个

字符数组也可以用来表示字符串
只有包含'\0'字符的字符数组才可以当作字符串使用
可以用字符串字面值对字符数组进行初始化,字符串字面值里的'\0'字符也会被初始化到字符数组里,字符数组里字符串内容可以修改

可以在printf函数调用语句里使用%s作为占位符把字符串里的所有字符显示在屏幕上