一级指针 二级指针 指针和数组 指针数组

 

1.一级指针

一级指针由 指向的数据类型关键词 星号* 指针名字组成

例:int * p =NULL;

指针变量存储的内容是指向的变量的地址

在使用sizeof判断指针的字节数时,在32位机器上为4个字节,在64位机器上也是4个字节

不同类型的指针除了指向的变量数据类型不同外,其解引用的权限也不同,使用位运算符时要注意

数组元素个数也要参与数组类型

void test(int arr[10])// 10是被忽略的

void test(int* arr[5])//不可以,这是一个二级指针
void test(int (*arr)[5])//ok,数组指针
void test(int **arr)//不可以
int main()
{  
    int arr[3][5] = {0}; 
    test(arr); 
}

void test1(int *p) {} //test1函数能接收什么参数? 
//整形指针
//一个整形的地址
//整形数组

2.二级指针

二级指针是一个指向指针的指针

int **p;

二级指针传参
#include <stdio.h>
void test(int** ptr)
{  
     printf("num = %d\n", **ptr);
    } 
int main() 
{  
    int n = 10;  
    int*p = &n;  
    int **pp = &p;  
    test(pp);  
    test(&p);  
    return 0;
 } 

3.指针数组和数组指针

1)指针数组: int 4* p[10]
由于[]的优先级高于*,所以p先于[4]结合成为数组,数组的元素类型为int* 
指针数组是数组, 数组的每个元素都是指针
2)数组指针: int (* p)[4]
由于()的优先级高于[],所以p先和*结合,说明p是一个指针变量,指向一个大小为4的整型数组 
指针数组是指针, 能够指向一个数组;

4.函数指针

CPU内部有个PC指针,是CPU内部的寄存器,PC保存的是当前正在执行指令的下一条指令的地址

void (*pfun1)(); //函数指针
void *pfun2();//函数声明

(*(void (*)())0)();// 0地址处所放置的特定函数  0强转成函数指针

void(*p[5])();//函数指针数组

函数名就是函数的地址

int (*fun[5])(int,int)= { 0, add, sub, mul, div }; 
//函数指针数组, 数组存放函数地址

(*(fun[0]))(x,y) // 调用的两种方法
fun[0](x,y)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值