11.3指针数组及其应用

//指针数组用于表示多个字符串
#include<stdio.h>
#include<string.h>
#define MAX_LEN 10;
#define N 150
void SortString(char *pStr[],int n)
{
    int i,j;
    char *temp=NULL;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n;j++)
        {
            if(strcmp(ptr[j],ptr[i])<0)
            {
                temp=pStr[j];//交换字符串的指针
                pStr[j]=pStr[i];
                pStr[i]=temp;
            }
        }
    }
}
int main()
{
    int i,n;
    char name[N][MAXLEN];
    char *pStr[N];
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        pStr[i]=name[i];//将第i行地址赋给数组
        gets(pStr[i]);
    }
    //char *pStr[N]={"America","England","Australia","Sweden","Finland"};
    SortString(pStr,n);
    for(i=0;i<n;i++)
    {
        puts(pStr[i]);
    }
    return 0;
}

11.4动态数组

动态内存分配是在堆上进行,需要用户手动分配和销毁
动态内存分配函数需要加上头文件:#include<stdlib.h>
malloc:
原型:void *malloc(unsigned int size)
返回一个通用指针,可以用强制转换的方法将返回的指针值转换为所需的类型
int *pi=NULL;
pi=(int *)malloc(2);
申请2个字节的内存,pi指针变量指向这段存储空间的首地址
pi=(int *)malloc(sizeof(int));用于不能确定某种类型所占内存的字节数

calloc:
原型:void *calloc(unsigned int num,unsigned int size);
第一个参数表示申请空间的数量,第二个参数表示每个空间的字节数
pi=(int *)calloc(10,sizeof(int));
pi=(int )malloc(10sizeof(int));
从安全考虑,前者更好。因为calloc能将分配的内存初始化为0。

free:
原型:void free(void *pi);
形参指向分配的内存地址

realloc:
原型:void *realloc(void *p,unsigned int size)
将p所指向的存储空间的大小改为size个字节

#include<stdio.h>
#include<stdlib.h>
void InputArray(int *p,int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&p[i*n+j]);
        }
    }
}
double OutputArray(int *p,int m,int n)
{
    int i,j,sum=0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            sum+=p[i*n+j];
        }
    }
    return (double)sum/(m*n);
}
int main()
{
    int *p=NULL,m,n;
    double aver;
    scanf("%d",&m);//m个班级
    scanf("%d",&n);//一个班级n个学生
    p=(int *)calloc(m*n,sizeof(int));
    if(p==NULL)
    {
        exit(0);
    }
    InputArray(p,m,n);
    aver=Average(p,m,n);
    printf("%lf\n",aver);
    free(p);//释放动态分配的内存空间
    return 0;
}
发布了34 篇原创文章 · 获赞 2 · 访问量 459

猜你喜欢

转载自blog.csdn.net/qq_42148307/article/details/105064436