03 指针篇

指针数组

#include <stdio.h>

int main()
{
    static char *s[]={"black","white","pink","violent"};//指针数组4个元素分别为4个字符串地址
    char **ptr[]={s+3,s+2,s+1,s};//指针的指针,分别保存第4、3、2、1个元素的地址
    char ***p;//p是一个三级指针
    p=ptr;//p指向数组ptr第1个元素
    ++p;//p指向数组ptr第2个元素

    printf("%s\n",**p+1);//打印结果从数组第2个元素的第2位开始,即ink
    return 0;
}

  • 函数指针
    函数指针本质是一个指针,其指向一个函数。
#include <stdio.h>

//函数指针
int (*fun)(int x,int y);

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

int main()
{
    int ret1,ret2;
    fun = add1;
    fun = &add2;
    printf("%p\n",add1);
    printf("%p\n",&add1);

    ret1=(*fun)( 1, 2);
    printf("ret1=%d\n",ret1);

    return 0;
}

函数名等于函数首地址。

  • 指针函数
    一个返回指针的函数,其本质是一个函数。声明格式为:*类型标识符 函数名(参数表)
    int *fun(int x,int y);,函数名前面多了一个星号,星号优先级低于括号,fun先和后面括号结合,这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。
#include <stdio.h>
#include <stdlib.h> 
#include <string.h> 

// 指针函数 返回类型为指针 
int* fun(int a, int b)
{    
	int *p = (int *)malloc(sizeof(int));
	printf("P的地址:0x%x\n",p);
	memset(p, 0 ,sizeof(int));
	*p = a + b;
	printf("*p = %d\n",*p);
	return p;
}

int main() 
{
	int *p1 = NULL;
	printf("P1初始化的地址:0x%x\n",p1);
	p1 = fun(2, 3);
	printf("P1的地址:0x%x\n",p1); 
	
	return 0;
}

posted @ 2023-09-17 22:49  xioahuhu  阅读(14)  评论(0编辑  收藏  举报