指针及其指针的使用

来源:互联网 发布:ext3 windows 编辑:程序博客网 时间:2024/05/16 00:43

一、指针数组:存放指针的数组。

示例代码:

#include<stdio.h>int main(){    int a = 4;    int *p = &a;    int *q = NULL;    int *w = NULL;    int *arr[3] = { p,q,w };    printf("%d %p %p", *arr[0], arr[1], arr[2]);}

运行结果:

运行结果

二、数组指针:指向数组的指针。

(1)一维数组指针

示例代码:

#include<stdio.h>int main(){    int a[3] = { 1,2,3 };    int(*p)[3] = &a;             printf("%d\n", *((*p)+0));    printf("%d\n", *((*p) + 1));    return 0;}

运行结果:

这里写图片描述

(2)二维数组指针

示例代码:

#include<stdio.h>int main(){    int a[3][2] = { {1,2},{3,4},{5,6} };    int(*p)[3][2] = &a;    printf("%d\n", *(*((*p)+0)+1));    printf("%d\n", *(*((*p) + 1) + 1));    return 0;}

运行结果:

这里写图片描述

三、函数指针:指向函数地址的指针

示例代码:

#include<stdio.h>void fun1(){    printf("hello world!\n");}int main(){    void(*p)() = &fun1;   //函数指针的定义    (*p)();               //*先与p结合,再与函数调用符()结合    return 0;}

运行结果:

这里写图片描述

四、函数指针数组:存放函数指针的数组

示例代码:

#include<stdio.h>void fun2(){    printf("HOW are you ?\n");}void fun1(){    printf("hello world!\n");}void fun3(){    printf("I am ok!\n");}int main(){    void(*p[3])() = { &fun1,&fun2,&fun3 };   //函数指针的定义与赋值    p[0]();    p[1]();    p[2]();    return 0;}

运行结果:

这里写图片描述

五、指向函数指针数组的指针:

示例代码:

#include<stdio.h>void fun2(){    printf("HOW are you ?\n");}void fun1(){    printf("hello world!\n");}void fun3(){    printf("I am ok!\n");}int main(){    void(*a[3])() = { &fun1,&fun2,&fun3 };     void (*(*p)[3])()=&a;  //函数指针数组的指针的定义与赋值    (*(*(p)+0))();         //函数调用    (*(*(p)+1))();         //函数调用    return 0;}

运行结果:

这里写图片描述