地址运算符:指针&
C语言中最重要的,也是最复杂的,概念之一就是指针,也是用来存储地址的变量。
一般来说,当需要改变调用函数中的某个参数数值时,任何被调用的无返回值C函数都需要使用地址来完成这个任务。
一元运算符&可以取得变量的存储地址,如pooh是一个变量名,则&pooh就是变量pooh的地址,可以看作变量pooh在内存中的存储位置。
1.使用指针
int i = 0; /* 声明和初始化int变量i,值为0 /
int * ipointer; / 声明int类型的指针变量ipointer /
ipointer = &i; / 指针变量ipointer的值为变量i的地址 */
2.间接运算符: *
当后面跟着是一个指针变量或地址时,*给出存储在地址里的数值,如:
int var = 0;
int * varptr = &var;
int var2 = *varptr;
*varptr表示指针varptr地址存储里的数值,那么变量var2的值等于变量var数值
3.指针操作
C提供了6种基本的指针操作。
3.1 赋值
可以把一个地址赋给指针。通常使用数组名或地址运算符&来进行地址赋值。
3.2 求值
运算符*可取出指针指向地址中存储的数值。
3.3 取指针地址
指针变量同其他变量一样具有地址和数值,使用运算符&可以得到存储指针本身的地址。
3.4 将一个整数加给指针
可以使用+运算符来把一个整数加给一个指针,或者把一个指针加给一个正数。两种情况下,这个整数都会和指针所指类型的字节相乘,然后所得的结果会加到初始地址上。
如果想加的结果超出了初始化所指向的数组的范围,那么这个结果是不确定的,除非超出数组最后一个元素的地址能够确保是有效的。
3.5 增加指针的值
可以通过一般的加法或增量运算符来增加一个指针的值。对指向某数组元素的指针做增量运算,可以让指针指向该数组的下一个元素。比如指针变量ptr指向数组的第1个元素,进行ptr++操作,则ptr会指向数组的第2个元素。
3.6 从指针中减去一个整数
可以使用-运算符来从一个指针中减去一个整数。指针必须是第一个操作数,或者是一个指向整数的指针。这个整数都会和指针所指类型的字节数相乘,然后所得的结果会从初始地址中减掉,如果相减的结果超出了初始指针所指向的数组的范围,那么这个结果是不确定的,除非超出数组最后一个元素的地址能够确保是有效的。
3.7 减小指针的值
指针当然也可以做减量运算。比如指针变量ptr指向数组的第3个元素,进行ptr--操作,则ptr会指向数组的第2个元素。
3.8 求差值
可以求出两个指针间的差值。通常对分别指向同一个数组内的两个元素的指针求差值,以求出两个元素之间的距离。比如指针变量ptr2指向数组第3个元素,指针变量指向ptr0指向数组的第1个元素,则ptr2 - ptr0的值是2,表示指针所指向对象之间的距离为2个int数值大小。
3.9 比较
可以使用关系运算符来比较两个指针的值,前提是两个指针具有相同的类型。
网友评论