int *p和(int *)p的区别;返回多个值给主函数的做法;int*p=new int[n]的用法;int *p = (int*)malloc(n*sizeof(int))的含义

一、int * p和(int * )p的区别

  1. (int **)p;//强制将变量p转换成指向int类型指针变量的指针(转换后p是指向指针的指针)
  2. (int *) *p;//强制将变量 *p 转换成指向int类型的指针变量,(*p当成整体做强制转换,这么看来,p也可能是一个指向指针的指针)
  3. *(int *)p;//强制将变量p转换成指向int类型变量的指针,再取这个指针变量指向的值;相当于 * ((int *)p);

二、返回多个值给主函数的做法
返回指针:

  1. int* display() { int *p; p=malloc(sizeof(int)*6); … return p; }
    //用p[0]~p[5]计算各位
    void main() { int *p; p=display(); … free( p ); }

  2. 使用全局变量:将shiwa,wa,qiao,bai,shi,ge定义成全局变量,然后子程序和主程序直接用

  3. 使用函数参数:

    void display(int* shiwa,int* wa,int* qiao,int* bai,int* shi,int *ge)

    函数中用类似这样的用法计算:(*ge)=Data%10;

    void main() {
    int shiwa,wa,qiao,bai,shi,ge;
    display(&shiwa,&wa,&qiao,&bai,&shi,&ge);
    }

  4. 用一个足够长的数返回:
    long display()
    {
    long n; … n=shiwa; n*=10; n+=wa; n*=10; n+=qiao; n*=10; n+=bai; n*=10; n+=shi; n*=10; n+=ge;
    return n;
    }
    void main()
    {
    int wa; long n;
    n=display();
    wa=n/10000;
    wa%=10;
    }
    三、int*p=new int[n]的用法
    这里直接来例子吧。
    例如:int * m=new int[10];
    这里,m是个指针,它指向一个数组长度为10的首地址。
    这个数组存放的元素是int类型。所以要
    int * m,指向首地址。
    然后,对比下
    int ** m=new int * [10];
    这个m也是个指针,它也是指向一个数组长度为10的首地址。
    只不过这个数组存放的元素类型是int * 类型。所以要用
    int ** m指向首地址。
    ** int * a = (int * )malloc(n * sizeof(int))的含义**

四、int * p = (int * )malloc(n*sizeof(int))的含义
int * a=(int * )malloc(n* sizeof(int)); 表示定义一个int类型的指针变量a,并申请n* sizeof(int)个字节(即4*n个字节)的存储空间。

malloc函数得定义stdlib头文件。

malloc是在C语言中是一个申请内存单元的函数。

函数原型:void *malloc(unsigned size);

功 能:分配size个字节的内存空间

返 回 值:成功,返回分配的内存单元的起始地址;否则返回0

举例说明如下:

// 下面的定义方法是正确的
int * a=(int * )malloc(n*sizeof(int)); // 定义指针,并分配内存单元
*a = 4; // 将值存入到指针a所指向的内存单元中
// 下面的定义方法就会出错
int *a; // 定义指针,没有分配内存单元
*a = 4; // 此时系统不知道该将4存入到哪个内存单元(因为指针未指向具体的内存单元(此时称该指针为野指针)),所以执行的时候会出错(编译没错)。

注意:(1)定义一个指针,为该指针分配一个一块n个int空间的内存,当然malloc还可能会返回null就是了。
(2)动态分配内存给指针a,类似于分配a[n]大小的数据空间(n是常量时),只是这种方式下,n可以作为一个变量运行时确定,较为灵活,但是也要相应执行free操作,否则会出现内存泄漏。
(3)sizeof(int)就是int类型占用的内存大小

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值