Skip to content

指针相关

指针函数与函数指针

指针函数全称为返回指针的函数。

函数指针是指向函数的指针。如int (*ptr)(int, int)=&add;将add函数的地址赋予ptr,并指定了参数类型和返回值类型。

完整示例:

C
#include <stdio.h>
#include <stdlib.h>
int add(int a, int b) {
  return a + b;
}

/*指针函数:返回指针的函数*/
int *genMem(){
    int *p = (int *)malloc(sizeof(int)*10);
    p[4]=123415;
    return p;
}

int main(void){
    /*函数指针*/
    int (*addFunc)(int,int) = &add;
    printf("%d\n",addFunc(1,2));
    
    int *pMem=genMem();
    printf("%d\n",pMem[4]);
    free(pMem);

    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    /*数组指针:指向数组的指针,本质是指针,需要通过*p得到数组*/
    int (*pArr)[10]=&arr;
    printf("%d\n",(*pArr)[4]);

    return 0;
}
Makefile
OBJS=main.o
TARGET=main

#Makefile自动推导
#main.o自动推导出main.c,并得到生成命令为${CC} -c main.c -o main.o

${TARGET}: ${OBJS}

clean:
	${RM} ${OBJS}

结论:XX指针是指针,XX函数是函数,XX数组是数组,不论前面加了什么修饰,本质都是后缀词所表示的含义。

指针变量大小

和编译器位数有关,编译器针对的是目标机器cpu的位数,32位编译器编译的指针大小为32/8=4个字节,64位编译器编译的指针大小为64/8=8个字节。

Apache-2.0 Licensed