指针和数组
---恢复内容开始---
指针——保存变量地址的变量
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语言中是以传值的方式将参数值传递给被调用参数。因此,被调用函数不能直接修改主调函数中变量的值。
举例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
void swap(int x, int y) { int temp; temp = x; x = y; y = temp; }
目的:交换两个元素的值。调用swap(a , b)。但是无法达到该目的。原因:由于参数传递采用传值的方式,因此上述的swap函数不会影响到调用它的例程中的参数a和b的值。只是交换了a和b副本的值。如何改进以实现这个目的?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
void swap(int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; }
指针
---恢复内容结束---