c语言学习-指针

发布时间 2023-03-22 21:11:13作者: 看看天书

指针变量

指针变量是存放地址的变量
指针变量需要区分类型,跨度不一样

int *p
// 这里*是标识符,告诉系统这是一个指针变量,用来保存地址
printf("%d\n", *p)
// 这里*是取值运算符,把内存地址p里的数据取出来

数组的首地址就是数组首个元素的地址
数组名就是数组的首地址

int arr[3] = {1, 2, 3};
int *p;// 8个字节表示一个地址

p = arr;
p = &arr[0];

p+1,偏移一个类型的字节数

二维数组

父子数组\

int a[3][4] = {{1,2,3,4},{5,2,3,4},{1,2,6,4}};

a是二维数组名,是父数组地址
a[0]是一维数组的名,是子数组的地址
a[0]+1 = *(a+0)+1

数组指针

用指针表示数组

一维数组

int a[3] = {1,2,3};
int *p;
p = a;

二维数组

int arr[3][4] = {{1,2,3,4},{5,2,3,4},{1,2,6,4}};
// 数组指针
int (*p)[4];
p = arr;

函数指针

如果在程序中定义了一个函数,在编译时,编译系统为这段函数分配了一段地址空间,这段地址空间的起始地址(入口地址)称为这个函数的指针
函数名就是地址
定义一个函数指针变量

void (*p)(int a, int b)
{

}

应用演示

void pri(){
    printf("1");
}

int main(){
    void (*p)();// 定义一个函数指针变量
    p = pri;// 指向函数
    pri();
    (*p)();// 调用

    return 0;
}

指针数组

一个数组内元素都是指针类型

int *p[4];

二级指针

改指针变量的定义时用到