欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指针

程序员文章站 2024-01-01 17:07:34
...

指针的分类

1.字符指针
2.数组指针
3.指针数组
4.函数指针
5.数组传参和指针传参
6.函数指针数组
7.指向函数指针数组的指针
8.回调函数

指针的概念

1.指针是个变量,用来存放地址
2.大小是固定的:32位-4个字节 64位-8个字节

字符指针

1.char*

int main()
{
    char ch = 'w';
    char *pc = &ch;
    *pc = 'w';
    return 0;
}

2.C/C++会把常量字符串存储到单独的一个内存区域

    char str1[] = "hello bit.";
    char str2[] = "hello bit.";
    char *str3 = "hello bit.";
    char *str4 = "hello bit.";

str1 and str2 are not same。
str3 and str4 are same。

指针数组

1.存放指针的数组

int* arr1[10]; //整形指针的数组
char *arr2[4]; //一级字符指针的数组
char **arr3[5];//二级字符指针的数组
数组指针

1.能够指向数组的指针

int (*p)[10];

p是一个指针,指向的是一个大小为10个整型的数组。()保证p先与*结合。

2.&arr与arr:
&arr表示数组的地址。+1后跳过整个数组的大小
arr表示数组首元素的地址

函数指针
#include <stdio.h>
void test()
{
    printf("hehe\n");
}
int main()
{
    printf("%p\n", test);
    printf("%p\n", &test);
    return 0;
}

此时输出的两地址相同,说明是否存在&并不会对取出的地址产生影响。
2.

int Add(int x,int y)
{
return x+y;
}

int main()
{
int sum=0;
int (*p)(int,int)=Add;//函数指针
sum=(*p)(3,4);//*可写可不写
printf("%d\n",sum);
}

将函数地址保存:void(*pfun);

函数指针数组

1.把函数的地址存到一个数组中,这个数组叫函数指针数组

int (*par[10])();

par与[ ] 结合,说明其为数组。数组的内容是int(*)()类型的函数指针
2.

int main()
{
int (*p[4])(int,int)=Add;//函数指针数组
sum=(*p)(3,4);//*可写可不写
}
指向函数指针数组的指针

1.是一个指针。该指针指向一个数组。该数组中的元素都是函数指针。

int main()
{
int (*p[4])(int,int)=Add;//函数指针数组
p1=&p;
}

p是一个数组,数组中4个元素。每个元素是一个函数指针。所以p为函数指针数组。&取出函数指针数组的地址赋给p1。所以p1是一个指向p的指针。

int (* (*p2)[4])(int,int)=&p;//指向函数指针数组的指针

指针

上一篇:

下一篇: