C语言指针系列

来源:互联网 发布:好用的男士爽肤水 知乎 编辑:程序博客网 时间:2024/06/14 07:55

C语言指针系列

综述:

1.指针的类型

从语法的角度看, 你只要把指针声明语句里的指针名字去掉, 剩下的部
分就是这个指针的类型。 这是指针本身所具有的类型。 让我们看看例一中各
个指针的类型:
(1)int*ptr;//指针的类型是 int*
(2)char*ptr;//指针的类型是 char*
(3)int**ptr;//指针的类型是 int**
(4)int(ptr)[3];//指针的类型是 int()[3]

2.指针所指向的类型

当你通过指针来访问指针所指向的内存区时, 指针所指向的类型决定了
编译器将把那片内存区里的内容当做什么来看待。
从语法上看, 你只须把指针声明语句中的指针名字和名字左边的指针声
明符*去掉, 剩下的就是指针所指向的类型。 例如:
(1)int*ptr; //指针所指向的类型是 int
(2)char*ptr; //指针所指向的的类型是 char
(3)int**ptr; //指针所指向的的类型是 int*
(4)int(*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int*(ptr)[4]; //指针所指向的的类型是 int()[4]

数组和指针

int arr[10] = {1,2,3,4};int(*p)[10];  //这里定义了一个指针,指向的是一个10个元素的数组。p = &arr;int temp =  *p[0];  //这里首先取盘p[0],然后取*p[0]  结果是1.int temp2 = **p;printf("the first value is %d\n", **p);  //这里首先*p指向arr,然后*(*p)指向了arr[0]printf("the first value is %d\n", *(*p+1));//这里首先*p指向arr,然后*(*p+1)指向了arr[1]

指针与函数

int max(int x, int y){    return x > y ? x : y;}void main(){    int(*p)(int ,int);  //定义了一个函数指针    p = max;     //函数指针指向max。    int z = (*p)(3, 4);    printf("the value is %d\n", z);}