不同类型的指针

文章目录

  • 指针数组
  • 数组指针
  • 函数指针
    • 无参数的函数指针
    • 含参数的函数指针
  • 无类型指针
    • malloc函数(动态分配内存)
    • 无类型指针

指针数组

#include 
#include 
int main()
{
	int a = 3;
    int b = 45;
    int c = -9;
    
    int* parry[3];
    parry[0] = &a;
    parry[1] = &b;
    parry[2] = &c;
    int i;
    for(i=0;i<3;i++)
    {
		printf(" %d ",*(parry[i]));
    }
    putchar('\n');
	system("pause");
	return 0;
}

指针数组按照我们白话文说的就是,指针的数组,说白了它总的就是一个数组,承载了多个指针变量的数组。定义方式:int* parry[3]

数组指针

#include 
#include 
int main()
{
	int a[3]={8,23,3};
    int* p2;
    int (*p)[3];
    p=a;
    p2=a;
    printf("地址一:%p\n",a);
    printf("地址二:%p\n",&a[0]);
    printf("地址三:%p\n",p);
    printf("地址四:%p\n",p2);
    
    printf("数组指针的偏移:%p\n",++p);
    printf("普通指针的偏移:%p\n",++p2);
    system("pause");
	return 0;
}

结果:不同类型的指针_第1张图片
数组的指针,顾名思义就是承载着数组量的一个指针,为什么这么说呢,我们都知道指针的偏移是有规律的,什么数据类型的指针就偏移相应的字节量,正因为如此,在普通指针中如*p2它的偏移量就应该是(0060FEE0-0060FEDC)4,也就是一个整形变量,而在数组指针中却是(0060FEE8-0060FEDC)12,也就是sizeof(3x(int))个字节,所以看得出,数组指针偏移量就是数组的个数

函数指针

无参数的函数指针

#include 
#include 

void printWelcom()
{
	printf("祖国加油\n");
}
int main()
{
	printWelcom();
    void (*p)();
    p=printWelcom;
    p();
    (*p)();
    printf("%p\n",p);

含参数的函数指针

#include 
#include 

int add(int a,int b)
{
	return a+b;
}
int main()
{
    int a=3;
    int b=3;
    int ret;
    int ret2;
    int ret3;
    ret=add(a,b);
    int (*padd)(int a,int b);
    padd=add;
    ret2=padd(a,b);
    ret3=(*padd)(a,b);
    printf("指针函数:%d\n",ret);
    printf("指针函数:%d\n",ret2);
    printf("指针函数:%d\n",ret3);
    printf("%p\n",padd);
    printf("%p\n",&add);
	system("pause");
	return 0;
}

不同类型的指针_第2张图片
可见,定义一个函数指针的方式类似于定义一个函数,该指针指向哪个函数,就按照这个函数的类型去定义,这样一来指针就指向了该函数,也就成了函数指针,对于函数指针可以直接用padd(a,b)这样的方式调用,也可以(*padd)(a,b)来调用

无类型指针

malloc函数(动态分配内存)

malloc函数是用来在C语言中动态分配内存的,一般来说malloc的格式是这样的:void malloc(),()内填入想要开辟的空间大小,而在实际运用当中一般都是把无类型换成整形,实型或者字符型等等。

无类型指针

#include 
#include 
int main()
{
    int n;
    int i;
    printf("请输入你想要开辟的数组空间大小:");
    scanf("%d",&n);
    int *parry=(int*)malloc(n*sizeof(int));//利用指针,malloc函数定义数组的方法
    for(i=0;i<n;i++)
    {
		printf("请输入第%d个数:\n",i+1);
        scanf("%d",&parry[i]);
    }
    for(i=0;i<n;i++)
    {
		printf("第%d个数:%d\n",i+1,(*parry)++);
    }
	system("pause");
	return 0;
}

无类型的指针定义之后,用malloc开辟的空间可以用来当做一个数组来使用,换句话说数组的定义除了传统的直接定义,还可以用分配空间给指针的方式来定义一个数组

你可能感兴趣的:(C语言笔记,C语言,c语言)