[C学习]指针与数组

来源:互联网 发布:网络连不上是什么原因 编辑:程序博客网 时间:2024/05/01 03:44

变量的地址就是变量的指针,存放变量地址的变量就是指针变量.为了表示指针变量和它所指向的变量的关系,用"*"来表示指向.

----------------------------

1>指针的定义

基类型 *指针变量名;

如:int *p;

p:     是指针变量中存放的值,它是一个地址,指向另一个变量的地址.

*P:   是指向变量里存放的值.

&p:是指针变量本身的地址.

注:指针变量必须指定基类型,而一个指针变量只能指向同一个类型的变量.如只有整型变量的地址才或可以放到指向整型的指针中.

------------------------------

2>指针变量的引用

指针变量中只能存放地址,不能将其非地址类型的数据赋给一个指针变量.

*:指针运算符,(或是"间接运算符")

&:取地址运算符

a>运算符"&"只能作用于内存中体现地址的对象,即在内存中为该对象分配存储空间,如变量,数组元素.而&(x+3)和&5则是非法的.

b>取寄存器register变量的地址也是非法的,register变量没有存放在内存中,而是在CPU的寄存器中.没有内存地址.

c>单目运算符*将它的操作数当作为最终目标的地址来对待,并取这个地址里的内容.

----------------------------

指针的应用:

3>指针变量作为函数参数:作用是将一个变量的地址传递到另一个函数中

注意:运算符*和&与!,++,--相同,是自右向左结合.

*p++与(*P)++的比较:

  *P++:先作++,再取*,所以先取p的值(一个地址),取*,得这个地址的值,再对p进行++,即下移一 个单位.

  (*P)++:括号内的优先级最高,即先取p地址里的值,再将这个值++.p本身不变化.

举例说明:swap(,)几种情况-----交换值

a>最常见的值传递,形参不影响实参的.

swap(int    x,   int    y) { int temp;    temp=x;    x=y;    y=temp}//swap(10,20)还是10,20

swap(int  *x,  int  *y)  {int temp;  temp =*x; *x=*y;*y=temp}//变换,变成 20,10

swap(int  *x, int  *y)   {int *temp ; *temp=*x;*x=*y;*y=*temp}//变换,变成20,10

swap(int  *x,int  *y)   { int * temp; temp=x;    x=y;     y=temp}//这个的值没有变化,但x,y指向地址变化

会画如上的内存变化过程.

原创粉丝点击