C语言之指针

 指针对C 语言的重要性不言而喻,不过,对其理解却非常容易有偏差。下面结合两个例子,希望能对指针有更进一步的认识。
void  main( void )
{
        
char  *= (char *) malloc(10);
        strcpy(p,
"hello");
        printf(
"%s ",p);
        free(p);
        p 
= NULL;//可有可无
        p="peng";
        printf(
"%s ",p);
}
这个程序似乎是有问题的,因为指针p所指向的空间在中途已经被释放了。但是,再仔细分析下“peng"是const char *型,实际是存储在静态数据区里的,p只是指向这段空间。所以并不需要空间。就如char *p="peng"一样。所以此处的用法没有错。打印结果是hello peng。
    再来看关于二级指针的两个程序,注意其空间的分配以及回收。
// 程序1
void  main( void )
{
        
char  **= (char **) malloc(2*sizeof(char *));//分配两个指针的空间
    p[0]="12345";//指针指向静态存储区
    p[1]="67890";
    printf(
"%s,%s ",p[0],p[1]);
    free(p);
//只需释放指针的空间
    p = NULL;
}
// 程序2
void  main()
{
    
char  **= (char **) malloc(2*sizeof(char *));//给二级指针分配两个指针的空间
    *p=(char *)malloc(10*sizeof(char));//为二级指针指向的指针分配其指向的空间
    *(p+1)=(char *)malloc(10*sizeof(char));
    strcpy(p[
0],"12345");
    strcpy(p[
1],"67890");
    printf(
"%s,%s ",p[0],p[1]);
    
for(int i=0; i<2;i++)
    
{
        
if(p[i] != NULL)
        
{
            free(p[i]);
//释放分配二级指针指向的指针所指的空间,否则会有内存泄漏
            p[i] = NULL;
        }

    }

    free(p);
//释放二级指针的空间
    p=NULL;
}
仔细分析以上代码可以得出,二级指针内存的分配实际上有两种不同含义的空间,一个是二级指针指向的指针所在的空间,另一个则是最终指针指向的空间,第二种可有可无,根据具体情况,要注意释放内存的不同之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值