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
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; }
相关文章推荐
- C语言指针学习经验总结
- 学习C语言指针
- 指针04 - 零基础入门学习C语言44
- C语言学习-指针-3.24
- C语言提高班学习笔记 lesson5 变量、指针
- C语言指针举例(From(新浪微博:@M了个J))学习笔记
- c语言学习零碎整理(9):传值调用,并不简单(特别是有指针的时候)
- 黑马程序员-----C语言学习之数组与指针
- C语言学习笔记15——指针的本质分析
- C语言学习-----指针篇(1)-----指向多维数组的指针和指针变量
- C语言学习笔记--------伊能C语言学习笔记----使用指针来解决函数的副本机制
- 指针09 - 零基础入门学习C语言49
- c语言复习 指针学习
- C语言中的指针学习(小黑板)
- c语言学习笔记 指针相关
- C语言学习趣事_关于指针转换
- C语言再学习 -- 再论数组和指针
- iOS开发学习之C语言---C08 高级指针-12
- C语言学习笔记(17指针)