iOS概念入门学习-C语言-指针

来源:互联网 发布:淘宝卖家进货app用什么 编辑:程序博客网 时间:2024/04/28 11:30

概述:本文简要介绍了指针的概念、定义方法和简单地应用,指针是一个十分复杂的工具,还包含各种类别,如:字符串指针、结构体指针、函数指针等,此文仅只作入门而已。

一、指针

1.概念

指针的概念,一言以蔽之就是:指针就是地址。那什么又是地址呢?

地址:计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节)。为了方便管理, 必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的地址。

2.指针的意义

提起指针的意义,不得不说到变量的存取方式,变量的存取方式分为两种:直接存取和间接存取。如下图:
这里写图片描述
直接存取:变量的赋值和取值(通过变量名进行存取值)

这里写图片描述
间接存取:通过指针(地址)间接操作完成。

直接存取是把值存入变量中,而变量又存储在地址中,所以,操纵了地址就操纵了地址中的值!除此之外,指针还有如下好处:

1)为函数提供修改调用变量的灵活手段;
2)让函数有多个返回值;
3)可以改善某些子程序的效率 >>在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针
传递地址而不是实际数据,即高传输速度,又节省大量内存;
4)为动态数据结构(如二叉树、链表)提供支持。
其中(2)点将在下面指针的应用中有具体的实例体现。

二、指针变量

1.概念

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
注意:
严格意义上说,指针是一个地址,是一个常量
指针变量是存放一个地址,是一个变量
如图:
这里写图片描述

2.指针变量定义方法

对指针变量的定义包括三个内容:
- 1)指针类型说明,即定义变量为一个指针变量;
- 2)指针变量名;
- 3)变量值(指针)
其一般形式为:

    类型说明符 *变量名; 

其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。

注意:
- 1)在定义指针时,“*”号表示定义的变量是指针变量,变量的值只能存放地址。
- 2)一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。
- 3)指针也可以被声明为全局、静态局部和局部的。

三、指针的应用

1.使用指针引用数组元素

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。对于数组a和指向数组a的指针p来说:
- 1)如果p的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址,或者说,它们指向a数组 序号为i的元素
- 2)(p+i)或p+i或a(a+i)是+i所指向的数组元素,即a[i]。
- 3)如果指针p1和p2都指向同一数组

结论: 引用一个数组元素,可用下面两种方法:
- 1)下标法,如a[i]形式
- 2)指针法,如(a+i)或(p+i)收地
- 3)a是常量(a++错误),p是变量(p++正 确)

2.使用指针让函数有多个返回值

  由于地址直接操纵了地址,所以在函数中操纵地址内存储的变量的话,变量的值也会得到修改,代码如下:

这里写图片描述

程序中并没有通过返回值来修改两个参数的值而是交换了地址内存储的内容,从而更“彻底”地交换了参数的值,可见指针是多么强大的工具啊。

四、字符串指针

1.字符串和字符串指针

在C语言中,可以用两种方法访问一个字符串,
- 1)字符数组
char string[]=”I love China!”;
printf("%s\n",string);

- 2)字符串指针指向字符串
char *变量名="字符串内容"; //"字符串内容"是常量
har *str="abc"
char ch = 'b';
char *p1 = &ch;

字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。

2.字符串指针定义和初始化

定义的同时进行初始化
char *ps="C Language";
等效于先定义后初始化:
char *ps;
ps="C Language";

3.字符串指针使用注意事项

  • 1)使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所有我们可以改变里面的字符当把一个字符串常量赋值一个字符数组的时候,那么它会把字符串常量 中的没有字符都放到字符数组里面
  • 2)使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符 ,但是我们可以令字符串指针重新指向新的字符串
  • 3)字符串指针不能直接接受键盘输入,否则会报错
    这里写图片描述
    错误的原因是:str是一个野指针,他并没有指向某一块内存空间,所以不允许这样写如果给str分配内存空间是可以这样用的,解决方式是让指针指向一个字符数组或者用malloc开辟一块内存空间给指针即可。

在之前的学习中,我们已经学习了字符串,但是个人感觉,字符串有一点十分不方便的地方就在于,定义的时候要设定字符串的长度,而字符串指针则不同,字符串指针内只是存储了字符串的首地址,至于字符串有多长,并没有那么苛刻的限制,但是字符串指针也有局限性,就是需要把指针指向一个字符串,或是需要手动malloc一段内存空间给字符串。另外值得注意的是,定义一个字符串后,不能通过scanf的方式获取用户录入的内容,否则会报错!

0 0
原创粉丝点击