C学习笔记 - 指针

时间:2023-03-09 01:03:45
C学习笔记 - 指针

指针与数组

    ,,,,};
    int *p;
    p = a;
    printf("*a = %d\n",*a);
    printf("*p = %d\n",*p);
    printf(]);
    printf(]);

数组名就是数组的首地址。以上输出结果都一样。数组名基本上和指针等价。但a是常量,不可以进行a++或者a+=1等操作,而指针p则可以。

指针数组和数组指针

数据类型 *变量名[]
//首先它是一个数组,数组的元素是一个指针,也就是说每个元素存储的内容是一个地址
];    

数据类型 (*变量名)[]
//首先它是一个指针,该指针指向一个数组
];

指针函数和函数指针

类型标识符 *函数名(参数表)
//指针函数,它是一个函数,返回值是一个指针
int *f(x,y);

类型标识符 (*函数名)(参数表)
//函数指针
int (*f)(int x);

//函数地址赋给函数指针
f = &Function
f = Function

//使用函数指针调用函数
x = (*f)();   //这种方法明确的指出了是通过指针调用函数
或者
x = f();

指针计算

自增自减:按它所指数据类型的长度进行增减

    ;
    int *p;
    p = &a;
    printf("%p\n",p);
    p++;
    printf("%p\n",p);

运行结果:

0x7fff5fbff7fc
0x7fff5fbff800

可以看到两个结果相差4,也就是int所占的字节长度。