预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共24页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

内容提要:7.1问题的提出与程序示例7.2变量的存储结构7.3指针的概念#include<stdio.h> voidmain() { intx=5,y=10; int*p,*q; p=&x;//取出变量x的地址,送给指针变量p q=&y;//取出变量y的地址,送给指针变量q printf("x=%d,y=%d\n",x,*q); printf("x=%d,y=%d\n",p[0],q[0]); } 程序运行结果: x=5,y=10 x=5,y=10下面给出指针的一个重要概念和三个运算符: (1)在C语言中,如果一个指针变量p存储了另一个变量x的地址,则称p指向x。例7-2的指向关系如图所示。 7.4指针的类型【例7-3】指向指针的指针【例7-4】数据类型的理解【例7-5】指针变量的理解7.5指针与数组【例7-6】分别用下标法、地址法访问数组元素。for(p=a;p<a+5;p++) { printf("%4d",*p); //指针法 } printf("\n"); for(p=a,i=0;i<5;i++) { printf("%4d",p[i]); //下标法 } printf("\n"); }说明: 数组名是指针常量,因而不能改变指向。 在使用指针法访问数组元素时,要注意“是否越界”问题。在例7.6中如果执行了*(a+5)=30,则可能破坏系统的其他数据,这是很危险的,应当避免。 使用指向数组元素的指针变量时,应当注意指针变量的当前值。如,for(p=&a[2];p<a+5;p++)printf(“%4d”,*p);的功能是输出a[2],a[3],a[4] 当指针变量指向一个数组的首下标变量后,也可把指针变量当数组名使用,通过下标法访问数组的元素。 for(p=a,i=0;i<5;i++){printf(“%4d”,p[i]);}当两个指针指向同一类型的存储单元时,可以进行相减运算,两指针相减是特殊运算,其结果是两地址之间同类型存储单元的个数,是整数而不是指针。7.6*指针数组7.7*动态数组malloc()函数 在内存中分配由应用程序使用的存储空间,并将此存储空间的起始地址作为函数返回值返回给调用处。调用形式为: (类型*)malloc(size);第7章指针3.realloc()函数 realloc()函数使已分配的存储空间改变大小,即重新分配,并将新存储空间的起始地址作为函数返回值返回给调用处,调用形式为: (类型*)realloc(p,newsize); 调用该函数后,新存储空间的地址与原存储空间的地址不一定相同。 调用该函数后,原存储空间的内容由系统复制到新存储空间中。 在程序设计中调用该函数的一般格式为: p=(类型*)realloc(p,newsize); 把新存储空间的地址赋值给指向原存储空间的指针变量。这样虽然指向变了,但指针变量名未变,能维护代码的一致性。 4.free()函数 free()函数用来释放由malloc()、calloc、分配的存储空间或由realloc函数重新分配的存储空间,调用形式为:free(p); 其中p必须是由malloc()、calloc、分配存储空间或由realloc函数重新分配存储空间时返回的地址。其作用是收回由p指向的动态分配的存储空间,以便将来重新分配。该函数无返回值。【例7-13】改变存储空间大小。7.7.2一维动态数组7.8*数的存储结构