c/c++指针和引用3

1.指针数组数组指针

#include <stdio.h>

int main()
{
    char *str[] = {"welcome","to","china","hello","world"};
    char **p = str + 1;   //p指向to,
    //*p指向的内存空间是welcome to china hello world
    str[0] = (*p++) + 2;  //"to "
    str[1] = *(p + 1);    //hello
    str[2] = p[1] + 3;    //执行hello中的'l',这个时候p[0]的指向和str[2]相同
    str[3] = p[0] + (str[2] - str[1]);// 'lo w'

    printf("%s\r\n",str[0]);//t对应0,‘ ’对应2,输出为‘\0’
    printf("%s\r\n",str[1]);//hello
    printf("%s\r\n",str[2]);//lo
    printf("%s\r\n",str[3]);//world   "lo w"  0对应‘l’
    
    return 0;
}
二级指针中 (p + 1) 和 (p[i] + 1)的区别要弄清楚,前者p[0]的指向不会发生变化,或者p[0]的指向和(p[i] + 1)是一样的

2. typedef用于函数指针定义

typedef int (*pfun)(int x, int y) //定义一个函数指针类型
int fun(int x, int y);//声明一个函数
pfun p = fun;//定义一个函数指针,并初始化为fun函数的地址
int ret = p(2,2);//调用函数指针

3. 有了malloc/free为什么还要有new/delete

        前者是库函数,后者是运算符

        前者不能执行析构和构造,后者可以

        对于非内部数据类型的对象而言,对象在消亡之前需要执行析构函数,释放掉内存空间,但是malloc/free是库函数,不是运算符不在编译器的控制权限之内,不能将执行析构函数和构造函数的任务强加于malloc/free,所以只有使用new/delete;

4. 各种内存申请和释放的区别联系

函数名称调用方式具体描述
mallocmalloc(sizeof(N))分配1快大小为sizeof(N)的区间,内存初始化的值是个随机数字
calloccalloc(n,sizeof(N))分配连续的n块,大小为sizeof(N)的连续空间,初始化为0
reallocrealloc(*ptr,sizeof(N))把ptr指向的内存大小增大sizeof(N),新增加的没有被初始化
freefree(void *ptr)释放掉内存空间,其空间可能存在数据,需赋值为ptr = NULL

5. 句柄和指针的区别

        句柄:指向指针的指针;它和系统有密切关联,可以有系统进行管理

        指针:通常由用户定义,用户管理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值