C语言程序设计(第6章指针)5
6.5指针的地址分配
我们可以定义指针变量指向任何类型的变量。在上面的处理中,指针变量所指向的变量是通过传递变量的地址来实现的。指针的值就是内存的地址,这个地址应该是安全的,而不是任意的。否则,写入存储单元的值将导致存储的数据或程序丢失。应该使用编译系统提供的标准函数来实现地址分配。
ANSI标准建议设置两个最常用的动态分配内存的函数,malloc()和free(),并将它们包含在stdlib.h中,但是malloc.h中包含了一些C编译,使用时请参考具体的C编译版本。
我们这里所说的动态内存分配,是指在定义指针变量的时候,它们的值是随机的,可能指向任何一个内存单元。如果指针指向不安全的内存地址,那么地址空之间的数据交换会产生意想不到的效果。因此,在程序执行过程中,为了保证指针操作的安全性,需要给指针变量分配一个安全的地址。程序执行期间指针变量的地址分配称为动态内存分配。当不需要指针变量时,分配的内存可以返回给系统。这个过程叫做内存单元的释放。Malloc()用于向编译系统申请内存分配;Free()用于在使用后释放被占用的内存。
【例6-21】两根弦的互换。
# include
# include
# include
main()
{
char * ptr 1,*ptr2,* temp
ptr 1 = malloc(30);/*为指针变量动态分配一个长度为3 0字节的存储空空间*/
ptr 2 = malloc(20);
temp = malloc(30);
printf(" input str 1:");
gets(ptr 1);/*输入字符串*/
printf(" input str 2:");
gets(ptr 2);
printf(" str 1-str 2 \ n ");
printf("%s.......%s\n ",ptr1,ptr 2);
strcpy(temp,ptr 1);/* string copy */
strcpy(ptr 1,ptr 2);
strcpy(ptr2,temp);
printf(" str 1-str 2 \ n ");
printf("%s.......%s\n ",ptr1,ptr 2);
free(ptr 1);
免费(ptr 2);
}
为指针变量分配的stores 空之间的长度取决于存储的字符数。在上面的程序中,两个字符串的交换可以通过标准函数strcpy()来完成,也可以通过字符串的指针交换来完成,temp = ptr1;
ptr 1 = ptr 2;ptr2 = temp实现了三个赋值语句。但是,交换指针的物理意义和通过函数复制字符串是完全不同的。前者是存储字符串地址的指针变量数据交换,后者是内存中物理空字符串之间的数据交换。当指针变量用完时,释放指针变量占用的内存空。
运行程序:r u n
输入STR1:中国
输入STR2:成都
STR1 - STR2
中国。
0条评论