指针和数组

---恢复内容开始---

指针——保存变量地址的变量

1.基础知识:内存的组织

    内存中有一系列编号或编址的存储单元,可以对单个或连续的存储单元进行操纵。char类型数据占据 一个字节的数据,short占据两个字节的数据,long占据四个字节的数据。那指针占据的空间是多大?通常是两个字节或者四个字节。

2.指针的操作:

    声明指针:*ip;          ip是指向int数据的一个指针

    取址运算:&            比如:ip=&c;                     注意:地址运算符只能作用于内存中的对象,即变量和数组。它不能作用于表达式、常量或register变量

    间接寻址运算符         比如:y=*ip;     y=*z[0]      //假设定义了一个z[10]的数组

    函数指针声明:           比如:double  atof(char *)   atof的参数是一个指向char类型的指针

    注意:1)每个指针都必须指向某种特定的数据类型。(例外情况:指向void类型的指针可以存储指向任意类型数据的指针)

              2)比较++*ip或(*ip)++:遵循从右至左的结合顺序

3.指针与函数参数:

     C语言中是以传值的方式将参数值传递给被调用参数。因此,被调用函数不能直接修改主调函数中变量的值。

    举例:

 

void swap(int x, int y)
{ 
     int temp;
     temp = x;
     x = y;
     y = temp;
}
View Code

 目的:交换两个元素的值。调用swap(a , b)。但是无法达到该目的。原因:由于参数传递采用传值的方式,因此上述的swap函数不会影响到调用它的例程中的参数a和b的值。只是交换了a和b副本的值。如何改进以实现这个目的?

void swap(int *px, int *py)
{
     int temp;
     temp = *px;
     *px = *py;
     *py = temp;
}
View Code

 

指针

---恢复内容结束---

posted @ 2017-11-15 00:10  qxl1993  阅读(99)  评论(0编辑  收藏  举报