不同类型的指针

指针数组

#include <stdio.h>
#include <stdlib.h>
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 <stdio.h>
#include <stdlib.h>
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;
}

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

函数指针

无参数的函数指针

#include <stdio.h>
#include <stdlib.h>

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

含参数的函数指针

#include <stdio.h>
#include <stdlib.h>

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;
}

在这里插入图片描述
可见,定义一个函数指针的方式类似于定义一个函数,该指针指向哪个函数,就按照这个函数的类型去定义,这样一来指针就指向了该函数,也就成了函数指针,对于函数指针可以直接用padd(a,b)这样的方式调用,也可以(*padd)(a,b)来调用

无类型指针

malloc函数(动态分配内存)

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

无类型指针

#include <stdio.h>
#include <stdlib.h>
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开辟的空间可以用来当做一个数组来使用,换句话说数组的定义除了传统的直接定义,还可以用分配空间给指针的方式来定义一个数组

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值