2.指针
一.指针是一种数据类型
1) 指针也是一种变量(从内存的角度看,就是分配四个字节的内存),占有内存空间,用来保存内存地址。
2) 指针变量和它指向的内存块是两个不同的概念。
例:拷贝字符串
#include <stdlib.h> #include <string.h> #include <stdio.h> #pragma warning(disable:4996) void main() { char buf1[100] = {0}; char buf2[100] = {0}; char *p1 = &buf1; char *p2 = &buf2; strcpy(buf1,"abcdef"); while (*p1 != '\0') { *p2 = *p1; p1++; p2++; } *p2 = *p1; printf("current buf1 is : %s\n",buf1); printf("current buf2 is : %s\n",buf2); system("pause"); }
运行示意图:
运行结果:
3) 指针是一种数据类型,是指它指向的内存空间的数据类型
这就是为什么int类型的指针p,和char类型的指针p,在进行p+1操作后,其步长不一致的根本原因。所以,指针的步长,是根据其所指的内存空间类型来定。
二.可以通过*p/*p++来改变变量的值是指针存在的最大意义
在实际应用时,就是用实参取地址,传给形参,在被调用函数里面用*p来改变实参,再把运算结果传出来。
三.函数指针
#include <stdio.h> #include <stdlib.h> void MyFun(int x); // 定义一个函数指针 void (*pMyFun)(int); int main(void) { MyFun(10); pMyFun = &MyFun; (*pMyFun)(20); system("pause"); return 0; } void MyFun(int x) { printf("%d\n",x); }