栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言数组作为函数参数传入时退化为指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言数组作为函数参数传入时退化为指针

1.传入数组时,数组名退化成一级指针(int s[ ]等效于int *s),传入指针数组时,数组名退化成二级指针。
2.假设s为函数内退化形成的指针,则*(s+i),s[i]效果相同,指针通过下标访问其所关联的内存中元素时相当于做了解引用即等同于做了 * 的操作。
3.当s被解引用后为void时,需要对void指定正确的类型,若解引用后是void*则不用。
具体见总结的案例:

#include 
#include 
#include 
using namespace std;

 void func(int **s)
 {
    cout<<"deliver int **!"<
        printf("%xn",*(s+i) );
        printf("0x%xn",s[i]);
        cout<<"type:"<().pretty_name()<
    cout<<"deliver void **!"<
        printf("%xn",*(s+i) );//s不用转化成int**,因为指针大小都相同,s+i跳变的距离是*s,即void*,大小和int*一致
        printf("0x%xn",s[i]);
        cout<<"type:"<().pretty_name()<().pretty_name()<().pretty_name()<
    cout<<"deliver void *!"<
        cout<<*((int *)s+i)<
    cout<<"deliver int *!"<
        cout<<*(s+i)<
    //char[] 转 char*
    void* arry[4]={nullptr};
    for(int i = 0; i < 4; i++)
    {
        arry[i] = new int(i);
    }

    cout<<"in main:"<
       printf("%x",*(arry+i) );
       printf("0x%xn",arry[i]);
    }
    
    func((int **)arry);//若arry是int**这里不用转,func内部实现所有地方都不变
    func_void((void **)arry);//以上三处打印结果一致

    int ar[4] = {1,2,3,4}; 
    funcc(ar);
    funcc_void(ar);//以上两处打印结果一致

    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号