现在的位置: 首页 > 08 指针 > 正文

动态存储分配

2013年09月05日 08 指针 ⁄ 共 1121字 ⁄ 字号 动态存储分配已关闭评论

静态分配就是在编译程序的时候就确定空间,动态分配就是在运行过程中由程序本身根据需要来确定空间。

malloc语法

void *malloc( size_t size );

说明:malloc向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型,void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

malloc往往和free配对使用,free用于释放相应的内存。

void free( void *ptr);
1
2
char *p;
p=(char *)malloc(sizeof(char)*20);

上面的代码表示malloc分配了20个字符空间,将未确定类型的指针强制转换成char *后再赋值给p。

(2011年3月填空题14题)以下程序运行后的输出结果是_____。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char *p;
    int i;
    p=(char *)malloc(sizeof(char)*20);
    strcpy(p,"welcome");
    for(i=6; i>=0; i--) putchar(*(p+i));
    printf("\n");
    free(p);
    return 0;
}

运行结果:emoclew

这个例子分配的是固定的20个字符空间,也可以采用下面的方式来实现差不多的功能。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
    char s[20], *p=s;
    int i;
    strcpy(p,"welcome");
    for(i=6; i>=0; i--) putchar(*(p+i));
    printf("\n");
    return 0;
}

这两个程序的区别:前者的空间用malloc分配后,使用完毕,就用free释放了;后者在整个程序运行过程中始终占用,直到程序使用完毕。

(2007年4月)以下程序的输出结果是_________。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    char *s1,*s2,m;
    s1=s2=(char*)malloc(sizeof(char));
    *s1=15;
    *s2=20;
    m=*s1+*s2;
    printf("%d\n",m);
    return 0;
}

【解析】malloc开辟了空间后,将地址复制给了s1和s2,都指向了同一个存储单元s。 下面的代码表达了同样的意思。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(int argc, char *argv[])
{
    char s, *s1,*s2,m;
    s1=s2=&s;
    s=15;
    s=20;
    m=*s1+*s2;
    printf("%d\n",m);
    return 0;
}

抱歉!评论已关闭.