**一、指针初级知识** |
int *a=&b是对的,把a指向b的地址。
*a就是b的值。int *a1 a2
与int* 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