1、1 0 内存用户数据区 2000 3 变量 i 2002 6 变量 j 2004 9 变量 k 3010 2000 变量 i_pointer int *p;float*q;p=q;int i;float*p;p=&i;int*p;p=100;指针变量只指针变量只存放地址存放地址!一个指针变量不能一个指针变量不能指向与其类型不同指向与其类型不同的变量的变量!我是真的,我是真的,你猜对了吗?你猜对了吗?应在类型相应在类型相同的指针变同的指针变量之间赋值量之间赋值6000600160026003600460056006p-1pp+1错!但TC下不报错VC下报错void Swap(int*x,int*
2、y)int temp;temp=*x;*x=*y;*y=temp;main()int a,b;a=15;b=8;Swap(&a,&b);printf(a=%d,b=%d,a,b);main()int a,b;a=15;b=8;Swap(a,b);printf(a=%d,b=%d,a,b);程序程序 1程序程序 2 主调函数主调函数被调被调函数函数实实 参参形形 参参主调函数主调函数被调函数被调函数55ab实实 参参形形 参参99xyabxy55temp9主调函数主调函数被调函数被调函数&a&a实实 参参形形 参参&b&bxyabxy5temp5ab99515 815 815 81515 881
3、5 81515a)调用Swap函数(b)执行Swap函数c)从Swap函数返回temp xy bmain函数Swap函数aaatemptempxxy y bb1588 15&a&b&a&b15(a)调用Swap函数 (b)执行Swap函数 a a b b *x *x *y *y y y x x&a&b main函数 Swap函数 temptemp下标:0 1 2 3 4 5 6 7 8 9 10 11 HelloChina0HelloChina0srcStridstStri下标移动方向dstStri=0srcStrdstStr结束拷贝ii+i 当只允许函数访问地址内容,不允许修改当只允许函数访
4、问地址内容,不允许修改时,可以把函数的指针参数定义为时,可以把函数的指针参数定义为constHelloChina0HelloChina0*srcStr*dstStr指针移动方向指针移动方向*to=0dstStrsrcStr+srcStrsrcStrdstStr+dstStr60006001600260036004600560066007a0a1a2a3aa+1a+260006001600260036004600560066007a0a1a2a3app+p+1 3 5 7 9a0 a1 a2 a3 a4 a5插入位置pos x=4x插入前:1 3 4 5 7 9 x插入后:插入元素xa0 a1
5、a2 a3 a4 a5a00a01a02a10a11a12aa0+0a+1a1+0a0+1a0+2&a00&a10&a11a1+1&a12&a01&a02 a00 a0a01a02a10 a1 a11a12 a a1+2 a23;weekDay0weekDay1weekDay2weekDay3weekDay4weekDay5weekDay6Sunday0Monday0Tuesday0Wednesday0Thursday0Friday0Saturday0weekDay0weekDay1weekDay2weekDay3weekDay4weekDay5weekDay6Sunday0Monday0Tuesday0Wednesday0Thursday0Friday0Saturday0 xSunday0a00a01a02a10a11a12pp+a00a01a02a10a11a12pp+能返回这两个值吗?能返回这两个值吗?指针参数指定了存放指针参数指定了存放这两个值的地址这两个值的地址能这样传递能这样传递m个班(每个班(每班班n个学生)的成绩吗?个学生)的成绩吗?指定存储指定存储m个班(每班个班(每班n个学生)成绩的首地址个学生)成绩的首地址