数据结构课件-指针,数组,内存分配,结构体.ppt

数据结构课件-指针,数组,内存分配,结构体.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课件-指针,数组,内存分配,结构体

补充内容 指针的本质 指针是变量 指针的值就是内存单元(变量)的地址 int I = 100; int *pI = I; int **ppI = pI; 指针的类型 “一个int型的指针”,指的是“一个类型为int*的指针”,编译器认为这样的一个指针指向的内存单元为4字节,并将其内容解释成int类型的值 pI++ 等价于pI = pI +1*sizeof(int) 字符型的指针是? int **ppI中ppI的类型是什么? 指针的类型(续) 类型名和*结构形成了新的指针类型,但*是和后面的变量结合 Int* a,b,c和int *a,b,c的写法效果一样,只有a是int型的指针,而b和c仍是int型的变量 指针的类型(续) 判断一个指针是否有效 if(p!=NULL) 如果指针变量是全局变量,则系统会默认将其值设为NULL,但如果指针变量是局部变量,系统不会给它赋初值,程序员必须明显指明其初值,否则会导致不可预测的结果 指针的类型(续) 指针不管是全局还是局部的,都应当在声明它的时候初始化,要么赋予一个有效的地址,要以赋予NULL int *Pint = NULL; pint = 0x1992;(这样做的结果是什么??) 指针的运算 int *p1,*p2; p++;p--; P+=5;p-=5; P2-p1; P2=p1; ,,=,=,!=,== (取址),*(取值) main() {   int*p1,*p2,*p,a,B;   scanf(%D,%D,a,B);   p1=a;p2=B;   if(a<B)    {p=p1;p1=p2;p2=p;}   printf(\na=%D,B=%D\n\n,a,B);   printf(max=%D,min=%D\n,*p1,*p2);   } Swap(int *p1,int *p2)  {int temp;    temp=*p1;     *p1=*p2;    *p2=temp;    } main()    {     int a,B;     int*pointer-1,*pointer-2;     scanf(%D,%D,a,B);     pointer-1=a;pointer-2=B;     if(a<B) Swap(pointer-1,pointer-2);     printf(\n%D,%D\n,a,B);    } 习题 要求使用指针和子函数完成以下程序: 输入a、B、C 3个整数,按大小顺序输出。 指针的传递 可以将函数的指针或返回值声明为指针,此时,函数接受的参数或返回值是内存单元的地址而不是内存单元的值 数组的本质 任何数组,不论是静态声明还是动态创建的,其所有元素在内存中都是连续字节存放的 数组的本质(续) 数组下标从0开始,到元素个数减1为止,下标必须是整数或整数表达式,在引用数组元素时,编译器通过下标值来计算所引用元素在内存中的地址。 a[3]=100 以上图为例,计算出a+3*sizeof(int) 得到0x004284FC,将原来的45改写为100 数组的本质(续) 数组名本身就是一个指针,数组名的值就是数组第一个元素的内存单元首地址,即:a==a[0],这样,可以通过同类指针迭代来遍历整个数组(如int *p=a;) 数组的本质(续) 另一方面,不能通过数组名来访问整个数组,除非它是带有\0结束符的字符数组(即字符串),由于这个原因,任何两个数组之间不能直接赋值 int a[10]= {0,1} int b[10]= {0,1,2,3,4,5,6,7,8,9} a=b;//错误 数组的本质(续) 想将一个数组的值赋给另一个数组,必须按元素逐个赋值,或者使用内存拷贝函数memcpy() 数组的初始化 指定数组的元素个数 int a[10]; 不指定数组的元素个数,而直接初始化 int a[]={1,2,3,4,5,6}; (等价于:int a[6];a[0]=1;a[1]=2;…) 数组的初始化 同时指定元素个数并初始化 int a[6]={1,2,3,4,5,6}; int a[100]={1}; 常见错误 int a[5]={1,2,3,4,5,6}; int a[10]={5,,12,2}; 注意防止越界 系统不会对数组的边界进行检测,防止越界是程序员个人的事 二维数组 二维数组在C语言中以“行序优先”来存储元素,即在存储时,先存储一行,再存第二行。 int a[5][3],当我们访问a[4][1]时,实际上编译器是*((a+4*3)+1),在定义二维数组

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档