1.指针与地址 通常的机器都有一系列连续编号或者编址的存储单元,这些存储单元可以单个进行操纵,也可以以连续承租的方式操控,通常情况下,机器的一个字节可以存放一个char型的数据,两个相邻的字节存储单元可以存储一个short型的数据,而四个相邻的字节存储单元可以存储一个long型的数据,指针是能够存放一个地址的一组存储单元,通常是2个或者是4个字节,因此如果c的类型的char而且p是指向c的指针,那么可以用一个运算符&可用于取一个对象的地址,需要注意的是地址运算符&只能应用于内存中的对象,也就是变量与数组元素,他不能作用于表达式,常量或者register类型的变量。一元运算符*是间接寻址或者简接引用运算符。当它作用于指针时,将访问指针所指向的对象。 p=&c; //这是将c的地址赋值給变量p,也就是p是指向C的指针。以下一段代码段能帮助你理解指针与地址的关系哇: 例1: //c code int x=1;y=2,z[10]; int *ip; //ip是指向int型的指针 ip=&x; //ip指向x y=*p; //y的值等于x=1 *ip=0; //x的值为0 ip=&z[0]; // ip现在指向z[0] 例2: double *dp,atof(char *); 指的是*dp以及atof(s)都是double型的类型,而atof的参数是一个指向char型的指针 需要注意的是:指针只能指向某种特定类型的对象,也就是说每个指针都必须指向某种特定类型的指针。(除了void指针外哈) 2.指针与函数参数: as is known to all:由于c语言是以传值的方式将参数值传递给被调用函数,因此,被调用函数不能直接修改主调函数中变量的值,例如swap函数: void swap(int x,int y) { int temp; temp=x; x=y; y=temp; } swap (a,b); 由于参数传递采用传值方式,因此上述的swap函数不会影响到调用它的历程中ab的值。,该函数仅仅是交换了a和b副本的值而已。囧 但是我们可以使得主调程序将指向索要交换的变量的指针传递给被调用函数:即: swap(&a,&b); void swap(int *p,int *q) { int temp; temp=*p; *p=*q; *py=temp; } |
|