C语言指针教学提纲
一、讲述数据在计算机中的存放方式,顺便讲用符号表管理变量
1、讲述我们常说的有多少内存的意思,内存的单位
2、画内存图,并讲述各种类型变量char ,short,long 在内存图中的存放情况
3、结合变量地址讲述指针的概念及作用。
4、讲述怎么样通过指针操作变量,并引出怎么操作针指变量本身。
5、结合数组和指针,
讲述指针其实也是一个变量,所以他本身也可以像其它变量一样存在符号表中,所以也可以对他进行取地址操作。加减操作。
(数据名其实就是一个指针类型的常量,可以进行地址类型的操作,但无法改变其值)
6、讲述指针变量也有类型之分,一个指针变量只能指向某种特定的数据类型。这就是为什么指针加1减1不是加一个字节而是加一个特定数据类型所占用的字节数。
7、为什么需要指针,对数据进行排序。
8、研究如下程序的执行结果
#include
void fun(int *a,int *b)
{int *k;
k=a;a=b;b=k;
}
main( )
{int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d,%d ",a,b);
}
结果是 3,6
怎么样交换 a,b的值呢?
图示上述程序中各变量在内存中的存放情况及程序的运行过程
|
|
Main符号表 |
|
|
|
|
|
|
变量名 |
类型 |
地址 |
初值 |
|
|
0x1F |
|
|
a |
int |
0x4 |
32 |
|
|
0x1E |
|
|
b |
int |
0x8 |
45 |
|
|
0x1D |
|
|
x |
int * |
0xC |
0x4(&a) |
k |
|
0x1C |
|
|
y |
int * |
0x10 |
0x8(&b) |
|
|
0x1B |
|
|
|
|
|
|
|
|
0x1A |
|
|
|
|
|
|
|
|
0x19 |
|
|
|
|
|
|
fun_b |
0x8 |
0x18 |
fun_b=&b=0x8=y |
|
|
|
|
|
|
|
0x17 |
|
| fun符号表(进入本函数后main函数 |
|
|
|
0x16 |
|
| 的符号表被屏蔽不再使用) |
|
|
|
0x15 |
|
| 变量名 |
类型 |
地址 |
初值 |
|
fun_a |
0x4 |
0x14 |
fun_a=&a=0x4=x |
| a |
int * |
0x14 |
0x4(&a) |
|
|
|
0x13 |
|
| b |
int * |
0x18 |
0x8(&b) |
|
|
|
0x12 |
|
| k |
int * |
0x1C |
|
|
|
|
0x11 |
|
| |
|
|
|
|
y |
0x8 |
0x10 |
y=0x8=&b *y=45=b |
| |
|
|
|
|
|
|
0xF |
|
| |
|
|
|
|
|
|
0xE |
|
| |
|
|
|
|
|
|
0xD |
|
| |
|
|
|
|
x |
0x4 |
0xC |
x=0x4=&a *x=32=a |
| |
|
|
|
|
|
|
0xB |
|
| |
|
|
|
|
|
|
0xA |
|
| |
|
|
|
|
|
|
0x9 |
|
|
|
|
|
|
b |
45 |
0x8 |
b=45;&b=0x8 |
|
|
|
|
|
|
|
0x7 |
|
|
|
|
|
|
|
|
0x6 |
|
|
|
|
|
|
|
|
0x5 |
|
|
|
|
|
|
a |
32 |
0x4 |
a=32;&a=0x4 |
|
|
|
|
|
|
|
0x3 |
|
|
|
|
|
|
|
|
0x2 |
|
|
|
|
|
|
|
|
0x1 |
|
|
|
|
|
|
|
|
0x0 |
|
指针内存示意图.xls
阅读(1031) | 评论(0) | 转发(0) |