c语言中的指针与结构体课件

c语言中的指针与结构体课件

ID:16436646

大小:284.00 KB

页数:39页

时间:2018-08-09

c语言中的指针与结构体课件_第1页
c语言中的指针与结构体课件_第2页
c语言中的指针与结构体课件_第3页
c语言中的指针与结构体课件_第4页
c语言中的指针与结构体课件_第5页
资源描述:

《c语言中的指针与结构体课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言中的指针与结构体指针的概念地址内容变量名intx=20,y=1,z=155;int*p;p=&x;100020x10021y1004155z20001000p2002指针变量指针变量:存放地址的变量某个变量的地址指向(内存单元)指针变量所指向的变量的类型int*p;p是整型指针,指向整型变量float*fp;fp是浮点型指针,指向浮点型变量char*cp;cp是字符型指针,指向字符型变量类型名*指针变量名指针声明符指针变量的定义取地址运算(&)和间接访问运算(*)*:间接访问运算符,访问指针所指

2、向的变量。*p:指针变量p所指向的变量。a3&ap*p如果指针的值是某个变量的地址,通过指针就能间接访问那个变量。&:取地址运算符,给出变量的地址。int*p,a=3;p=&a;把a的地址赋给p,即p指向a//指针变量的类型和它所指向变量的类型相同a3&ap*p(1)当p=&a后,*p与a相同(2)int*p;定义指针变量p*p=10;指针p所指向的变量,即a,改变变量值(3)&*p与&a相同,是地址*&a与a相同,是变量(4)(*p)++等价于a++将p所指向的变量值加1*p++等价于*(p++)/

3、/先取*p,然后p自加,此时p不再指向a说明inta=3,*p;p=&a;赋值运算a3&ap1&ap2*p1*p2inta=3,*p1,*p2;p1=&a;//把a的地址赋给p1,即p1指向ap2=p1;//p2也指向a//相同类型的指针才能相互赋值注意:指针变量必须初始化。voidmain(){inta=1,b=2,*p1,*p2,*pt;p1=&a;p2=&b;printf("a=%d,b=%d,*p1=%d,*p2=%d",a,b,*p1,*p2);pt=p1;p1=p2;p2=pt;pri

4、ntf(“a=%d,b=%d,*p1=%d,*p2=%d”,a,b,*p1,*p2);return0;}p1b2&bp2*p2a1&a*p1ptb2&ap2*p1a1&bp1*p2pt&aa=1;b=2;*p1=1,*p2=2a=1;b=2;*p1=2,*p2=1指针作为函数参数voidswap(int*px,int*py){intt;t=*px;*px=*py;*py=t;}要通过函数调用来改变主调函数中某个变量的值:(1)在主调函数中,将该变量的地址或者指向该变量的指针作为实参(2)在被调函数

5、中,用指针类型形参接受该变量的地址(3)在被调函数中,改变形参所指向变量的值abpxpy1221//swap(&a,&b);数组和地址间的关系inta[100],*p;数组名代表一个地址,它的值是数组首元素的地址(基地址)a+i是距数组a的基地址的第i个偏移3000a[0]地址内容数组元素3002a[1]3198a[99]a[i]aa+1a+99a+i&a[i]*(a+i)sum=0;for(i=0;i<100;i++)sum=sum+a[i];*(a+i)下标运算符[]的含义任何由数组下标来实现的

6、操作都能用指针来完成inta[100],*p;p=a;或p=&a[0];pp+1p+99p+i3000a[0]地址内容数组元素3002a[1]3198a[99]a[i]aa+1a+99a+i&a[i]a[i]a+i*(a+i)p+i*(p+i)&p[i]p[i]p=a;sum=0;for(i=0;i<100;i++)sum=sum+p[i];等价等价*(p+i)sum=0;for(p=a;p<=&a[99];p++)sum=sum+*p;用指针实现内存动态分配变量在使用前必须被定义且安排好存储空间存储

7、空间分配分为两种:静态分配动态分配静态分配:全局变量、静态局部变量的存储是在编译时确定,在程序开始执行前完成。自动变量,在执行进入变量定义所在的语句时为它们分配存储,变量占用空间的大小也是静态确定的。动态存储分配不是由编译系统分配的,而是由用户在程序中通过动态分配获取。使用动态内存分配能有效地使用内存使用时申请用完就释放动态内存分配的步骤(1)了解需要多少内存空间。(2)利用C语言提供的动态分配函数来分配所需要的存储空间。(3)使指针指向获得的内存空间,以便用指针在该空间内实施运算或操作。(4)当使用

8、完毕内存后,释放这一空间。动态存储分配函数malloc()void*malloc(unsignedsize)在内存的动态存储区中分配一连续空间,其长度为size若申请成功,则返回一个指向所分配内存空间的起始地址的指针若申请内存空间不成功,则返回NULL返回值类型:(void*)通用指针的一个重要用途将malloc的返回值转换到特定指针类型,赋给一个指针malloc()示例/*动态分配n个整数类型大小的空间*/if((p=(int*)malloc(n*si

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。