您的位置:首页 > 编程语言 > C语言/C++

C语言指针学习六

2015-04-30 17:41 246 查看
下面通过交换两个数的值的例子比较,程序代码在最下面,加深对指针变量的理解 

swap1函数
①main主函数a的值3,b的值5传递到是swap1,

swap1的局部变量p, q虽然在做值3和5 的交换,

可是一旦交换完毕,局部变量p和q所占用的内存空间会释放掉。

②主函数main中的a, b仍然没有被改变。

swap2函数

①main函数中a和b的地址分别传递给p, q.

swap2做的是两个地址值的传递,被新赋给的两个地址值交换,

但是无法将main程序中a的地址更换为b的地址,

b的地址更换为a的地址。任何程序都无法做到

②所以a的值没有变,b的值没有变

swap3函数

①main函数中a和b的地址分别传递给p, q.

此时*p将完全相当于a, 因为p的地址是a的内存地址,

*在这里是&的你运算,这样*q就完全等同与b

在swap3中交换*p和*q就完全等同于交换main函数中的a和b.

①一旦一个指针变量被赋予了某个普通变量的内存地址,指针变量就指向了这个普通变量

②这个指针变量指向了这个普通变量,则修改指针变量,不影响该普通变量

同样这个时候修改普通变量也不影响指针变量。

③*指针变量完全等同于该普通变量。

④另外需要说明的是变量的本质就是内存

⑤普通变量(相对与指针变量而言,即非指针变量)一旦被定义,其内存地址无法被改变,如main函数中的a, b

交换变量值的经典程序

#include <stdio.h>

void swap1(int p, int q)
{
int t;

t = p;
p = q;
q = t;

return;
}

void swap2(int * p, int * q)
{
int * t;

t = p;
p = q;
q = t;

return;
}

void swap3(int * p, int * q)
{
int t;

t = *p;
*p = *q;
*q = t;

return;
}

int main()
{
int a = 3;
int b = 5;

printf("==========The first call swap1============\n");
printf("before swap1(a, b),   a = %d, b = %d\n", a, b);
swap1(a, b);
printf("after  swap1(a, b),   a = %d, b = %d\n", a, b);

printf("==========The second call swap2===========\n");
printf("before swap1(&a, &b), a = %d, b = %d\n", a, b);
swap2(&a, &b);
printf("after  swap1(&a, &b), a = %d, b = %d\n", a, b);

printf("==========The third call swap3============\n");
printf("before swap3(&a, &b), a = %d, b = %d\n", a, b);
swap3(&a, &b);
printf("after  swap3(&a, &b), a = %d, b = %d\n", a, b);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: