关于C语言指针的一些理解(一)

  在谭浩强老师编写的C程序设计(第二版)一书指针那一章节中,他明显的指出了每一个学习和使用C语言的人,都应该深入的学习和掌握指针。不掌握指针就没有掌握C语言的精华。因此指针的学习是非常重要的。在以下的几篇博客中,我将将自己在学习C语言中面临的一些困惑分享出来,希望对大家有所帮助。

 1、在程序中每一个变量都是都有一个地址,一个变量的地址就称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址,那么这个变量就称为指针变量。首先应该理解指针与指针变量两者的概念和区别。

  下面举个例子来具体说明指针与指针变量:

int *p;

int i=3;

p=&i;

在此例中,p就是指针变量,i的地址可以用p来表示。*p=3,*p和i的作用相同。

2、定义指针变量

  指针变量的定义格式为: 基类型 *指针变量名

  指针变量名和定义一般变量一样,也可以为数组名。

  关于为什么要定义基类型:因为不同的数据类型在内存中占据不同的字节,如整型占据两个字节,实型占据4个字节,字符型占据1个字节。指针在移动一个位置时,对应于整型变量移动2个字节,实型变量移动4个字节,而字符型变量移动1个字节。因此必须定义指针变量的类型即基类型。

3、关于指针变量运算符运算优先顺序的一些说明

   *、&、++、--,他们的优先级别相同,运算顺序为从右至左。

4、交换指针变量的值和交换实参的值

  main()

{

int *p1,*p2,*p,a,b;

a=3;b=4;

p1=&a;p2=&b;

if(a<b)

{

p=p1;p1=p2;p2=p;

}

printf("%d,%d",a,b);

printf("%d,%d",*p1,*p2);

}

输出结果为:3,4

                    4,3

下面这个程序结果则相反:

swap (int *p1,int *p2)

{int temp;

temp=*p1;p1=*p2;p2=temp;

}

main()

{

int a,b,*q1,*q2;

a=3;b=4;

if(a<b)swap(q1,q2);

printf("%d,%d",a,b);

}

输出结果为:4,3

最上面那个程序p1值由&a变成&b,p2值由&b变成&a,而下面那个程序则是在指针变量作为形参时,在函数执行过程中使指针变量所指向变量值发生变化时,函数调用结束后变化依然被保留下来。这样使用指针变量就解决了变量值“单向传递”的问题。

  

猜你喜欢

转载自blog.csdn.net/yhxiaohao/article/details/79477886