C语言指针全能篇

**一、指针初级知识**
** int *a=b是错的

int *a=&b是对的,把a指向b的地址。
*a就是b的值。int *a1 a2int* a1 a2都是把a1声明为指针变量,a2为int型变量。
printf(“a的地址:%p\n”,&a)%p是输出地址所用的符号。
数组和指针是密不可分的关系。
指针变量在32位系统中占4个字节;在64位系统中占8个字节。表示全部寻址范围(4个字节=32位);
char *p. --- *(p+i)就相当于数组p[i]

x=a++表示x=a,a++;指针变量必须初始化。
记住有子函数如void swap(int *a ,int *b) {... }时。**主函数swap(&a,&b),应该放的是变量地址,而不是a,b的值哦。
***``

// 
int sum(int arr[],int n)相当于
int sum(int *arr,int n);

如果sum(a,3);的意思是调用sum函数计算a数组的前三个元素之和:
那么sum(a+2,3);的意思就是从a【2】开始的连续三个元素之和。
定义数组一定要确定数组的长度,这样编译器才能为它分配相应的内存空间。
char sp, sp=“wang guang huan”.
sp是字符指针变量,sp=地址=数组首=数组名[](就这样理解吧)
对于数组一定要先分配空间再引用。
字符指针变量常用的方法有两种,一种是让其指向已经存在的字符数组首地址,一种是让其指向一个动态分配的内存块。
指针函数

指针函数

在这里插入图片描述
在这里插入图片描述
指针函数返回值是地址。
在这里插入图片描述
自定义函数里的变量不可作为返回地址,因为作为子函数传递之后自动释放了。
在这里插入图片描述
这个指向的地址是主函数里面的,所以没有被释放。

**函数指针**
**

在这里插入图片描述
add就是一个函数,参数表(int,int)就是add和pfun函数的形参格式。
在这里插入图片描述
函数名本身就是一个地址
在这里插入图片描述
函数里面的指针函数调用函数 666啊
在这里插入图片描述
op( )函数采用函数指针(星号pf( )作为形参,而每次调用op( )函数时,要调用的函数不是固定的。第一-次调用op( )函数时,在实参传递给形参的过程中,相当于进行了"intx=i;"、"int y= j;"和"int (* pf(int,int) = add;"等初始化操作,使得函数指针pf指向了add( )函数,所以在执行其函数体内的"result = pf(x, y);"时,实际上是调用add( )函数。同样,第二次调用op( )函数时,实际上是调用sub( ),如此类推,只要在每次调用op( )时,给出不同的函数名作为实参即可,op( )函数不必作任何修改。
在这里插入图片描述
函数指针数组用来编菜单方便。
在这里插入图片描述
后面加上{f1,f2…}这些函数名称(地址)作为实参。通过上移下移来移动数组的下标。
持续更…2020.6.29. 23:54

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值