指针与数组
int a[] = {1,2,3,4,5}; int *p; p = a; printf("*a = %d\n",*a); printf("*p = %d\n",*p); printf("a[1] = %d\n",a[1]); printf("p[1] = %d\n",p[1]);
数组名就是数组的首地址。以上输出结果都一样。数组名基本上和指针等价。但a是常量,不可以进行a++或者a+=1等操作,而指针p则可以。
指针数组和数组指针
数据类型 *变量名[] //首先它是一个数组,数组的元素是一个指针,也就是说每个元素存储的内容是一个地址 int *a[5]; 数据类型 (*变量名)[] //首先它是一个指针,该指针指向一个数组 int (*a)[5];
指针函数和函数指针
类型标识符 *函数名(参数表) //指针函数,它是一个函数,返回值是一个指针 int *f(x,y); 类型标识符 (*函数名)(参数表) //函数指针 int (*f)(int x); //函数地址赋给函数指针 f = &Function f = Function //使用函数指针调用函数 x = (*f)(); //这种方法明确的指出了是通过指针调用函数 或者 x = f();
指针计算
自增自减:按它所指数据类型的长度进行增减
int a = 10; int *p; p = &a; printf("%p\n",p); p++; printf("%p\n",p);
运行结果:
0x7fff5fbff7fc 0x7fff5fbff800
可以看到两个结果相差4,也就是int所占的字节长度。
时间: 2024-10-01 05:03:13