C语言指针学习八
来源:互联网 发布:手机淘宝举报在哪里看 编辑:程序博客网 时间:2024/06/16 01:06
实参与形参的不同
#include <stdio.h>void swap(int * p, int * q){ int t; t = *p; *p = *q; *q = *t;}int main(){ int a = 3; int b = 5; swap(&a, &b); printf("a = %d, b = %d\n", a, b); return 0;}
形参与实参定义:
在main函数中变量a, b作为实参(相对于swap(int * q, int * p);),
q和p被称之为形参变量。
编译器为刚定义的变量分配空闲内存单元
即使我们不在程序中人为的为变量分配内存空间。编译器也会一旦发
现有变量被定义,编译器会自己找到一片空闲的内存单元给刚定义的
变量,而且会随机赋给变量一个垃圾值。
这样就导致,实参与形参本质的不同在于内存单元不同:
a有自己的内存单元,用于存放赋给整型变量的具体数值,而且这个内
存单元编号不同于b, p, q这三个变量的内存单元编号b有自己的内存单元,用于存放赋给整型变量的具体数值,而且这个内
存单元编号不同于a, p, q这三个变量的内存单元编号p有自己的内存单元, 用于存放整型变量内存单元编号这种数值,而且
这个内存单元编号不同于a, b, q这三个变量的内存单元编号q有自己的内存单元,用于存放整型变量内存单元编号这种数值,而且
这个内存单元编号不同于a, b, p这三个变量的内存单元编号
这也是导致要交换两个数的值,一旦封装成函数去实现的难度。
指针变量和*指针变量很好的解决了这个问题。
int * p;
int a = 3;
p = &a;
这个时候指针变量p:
p保存了a的地址。
p指向了a.
*p完全等同于a
或者更准确的说*p是以p的内容为地址的变量
理解这个程序关键是理解:
*p完全等同于a
或者更准确的说*p是以p的内容为地址的变量
p的内容就是a的地址(a的内存单元编号)
*p是以p的内容为地址的变量
更进一步可以说成是
*p是以a的内存单元编号为地址的变量。
而以a的内存单元编号为地址的变量,其实就是a自己。
这样就不难理解*p完全等同于a了。
那么同样的*q完全就等同于b了。
这样的话,我们做到了在main函数以外的函数(swap)中操纵main函数内
定义的a, b变量, 使其发生值的交换。这样的做法和在main函数体内,不用外部交换函数,通过编写交换变量的语句而直接交换a, b值功效一样。
不过你会觉得在main函数内能交换,干嘛非得写个外部函数去做,其实这点需要理解编写自定义函数的目的是为了解决这样的问题:
对一类具有相同功能的代码模块,可能被其函数反复,多次调用。
同样需要程序员多次编写相同重复的代码。这样的代码可以抽取独立成一个模块,自定义为一个函数。
这样做的好处是有利于函数的模块化。
这点和C语言程序设计的精神是一致的:
自顶向下,逐步细化,模块化。。。。
- C语言指针学习八
- C语言回顾 八 指针
- 学习C语言指针
- C语言指针学习
- C语言指针学习
- c语言指针学习
- c 语言指针学习
- C语言指针学习
- C语言指针学习
- C语言指针学习
- C语言学习-指针
- c语言 指针学习
- C语言学习-指针
- [C语言学习]作业八
- c语言学习笔记八
- C语言学习笔记<八>
- C语言学习历程(八)数组和指针的关系及几个程序
- 爬爬爬之路:C语言(八) 指针与指针数组
- 多态
- Hopcroft-Karp 二分图HDU2389 Rain on your Parade
- lua gc和weaktable
- DP·数位DP(3)
- POJ 3281 Dining dinic
- C语言指针学习八
- ruby 流程控制 方法
- java语言实现创建型设计模式—抽象工厂模式
- 漫谈程序员系列:快来约这些女生,保你脱单
- 《python核心编程第二版》第七章练习解析
- 10-2. 删除字符串中的子串(20)
- YTUOJ-占座问题(2道)
- 【Leetcode Shell】Word Frequency
- mongodb的安装 win7 32位机