指针的进阶

1、字符指针

char* p = "abcdef"→是把字符串首字符a的地址,赋值给了p

例:

int main()
{
    const charp1 = "abcdef";
    const charp2 = "abcdef";
    char arr1[] = "abcdef";
    char arr2[] = "abcdef";
    if (p1 == p2) 
        printf("p1==p2");
    else 
        printf("p1!=p2");
    if (arr1 == arr2) 
        printf("arr1==arr2");
    else
        printf("arr1!=arr2");
    return 0;
}

结果:p1 == p2

arr1 != arr2

2、指针数组

指针数组是数组

例如:int* arr1[10]→arr1是变量名,先向后结合,是数组,再向前看,每个元素int*类型

3、数组指针

数组指针是指针

例如:int (*arr)[]

数组名通常表示的都是数组首元素的地址,但有2个例外:

1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组大小

2.&数组名,这里的数组名表示的依然是整个数组

4、数组传参、指针传参

形参的二维数组,行可以省,列不能省!

二维数组的数组名,表示首元素的地址,其实是第一行的地址,第一行是一个一维数组

//这五种形式的形参均可
void test1(int arr[]);
void test1(int arr[10]);
void test1(int* arr);

void test2(int* arr[20]);
void test2(int** arr);

int main()
{
    int arr1[10]={0};
    int* arr2[20]={0};
    test1(arr);
    test2(arr2);
    return 0;
}

一级指针传参

void print(int* p){}

int main()
{
    int a=10;
    int* ptr=&a;
    int arr[10];
    //这三种传参均可以
    print(&a);
    print(ptr);
    print(arr);
    retunr 0;
}

二级指针传参

void test(int** p){}

int main()
{
    int* p1;
    int** p2;
    int* arr[10];
    //这三种传参传参均可以
    test(&p1);
    test(p2);
    test(arr);
    return 0;
}

5.函数指针

函数指针是指针

例如:int (*ptr)()

对于函数来说,函数名和取函数名都是函数的地址

6.函数指针数组

函数指针数组是数组

例1:(*(void(*)())0)();

以上代码是一次函数调用,调用的是0作为地址处的函数

把0强制类型转换为:无参,返回类型是 void 的函数的地址

调用0地址处的这个函数

例2:void(*signal(int,void(*)(int)))(int);

signal 是函数名,以上代码是一次函数声明

声明的 signal 函数的第一个参数的类型是 int,第二个参数的类型是函数指针,该函数指针指向的函数参数是 int,返回类型是 void,signal 函数的返回类型也是一个函数指针,该函数指针指向的函数参数是 int,返回类型是 void

定义:int(*parr1[10])();parr1先和[]结合,是数组,数组内容是 int(*)()类型的函数指针

函数指针数组的用途:转移表

7.指向函数指针数组的指针

指向函数指针数组的指针是一个指针

指针指向一个数组,数组的元素都是函数指针

定义:int (*(*ppfArr)[5])(int,int) = &pfArr;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值