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

(入门自用)C语言 指针的理解

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

(入门自用)C语言 指针的理解

arr[i] 等价于 *(arr+i)

使用数组指针接受参数

二维数组用,一维数组不建议

首先是一维数组:

void print1 (int(*p)[10],int sz)
{
    int i=0;
    for(i=0;i 

 二维数组:

void print1 (int(*p)[5],int c ,int r)
{
    int i=0;
    for(i=0;i 

int* parr1[10];  parr1是一个数组,有10个元素,每个元素的类型是int*

int (*parr2)[10];  parr2是一个指向数组的指针,指向的数组有10个元素,每个元素的类型是int

int (*parr3[10] )[5]: parr3是一个数组,数组有10个元素,每个元素的类型是int(*)[5]是一个数组指针

parr3是一个存放 数组指针 的数组.

 去掉数组名和方框剩下的是 数组的元素类型

void test(int*p)
{}
void test2(int **p)
{}
void test3(int(*p)[5])
{}
void test4(int (*p)[3][5] )
int main()
{
    int arr[10];
    int *arr2[20];
    int arr3[3][5];
    test(arr);
    test2(arr2);
    test3(arr3);
    test4(&arr3);
    return 0;
}

数组名是数组首元素地址(两个例外:sizeof(arr)和&arr这两个表示数组的地址)

函数指针
int Add(int x,int y)
{
return x+y;
}
int main()
{
    int (*p)(int,int)=&Add;//不写&也可以 p是函数指针

    //函数调用
    int ret=Add(2,3);
    int ret2=(*pf)(2,3);//pf(2,3)也可

    return 0;
}
函数指针数组
int Add(int x.int y)
{
    return x+y;
}
int Sub(int x,int y)
{
    return x-y;
}


int main()
{    
    //字符指针数组
    char* arr[5];
    //整型指针数组
    int* arr[5];
    //函数指针
    
    int (*p) (int,int);

    //返回类型     形参类型
    //函数指针数组
    int (*p[5])(int.int)={0};
    int (*p[5])(int.int)={Add,Sub};
    
    return 0;
]

几个有趣的代码:

void(* signal(int,void(*) (int) ) )(int);//函数声明
//signal函数的参数,第一是int类型,第二个是void(*)(int)的函数指针类型
//其返回值是 void(*)(int)的函数指针类型
typedef void(* pf_t)(int);//给void(*p)(int)函数指针类型重命名为pf_t
pf_t signal(int,pf_t);
void test()
{
    printf("hehen");
}

void print_hehe( void(*p)() )
{
    if(1)
        (*p)();
}


int main()
{

    print_hehe(test);
    return 0;
}

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

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

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