C语言面试必问知识点之「指针」
一、指针相关概念
指针与地址
我们使用的计算机,系统为了更好地管理我们的内存,就为内存区的每一个字节都分配一个唯一编号,这就是“地址”。
指针的实质就是地址,就是这一个个编号。
指针变量
变量在编译的时候系统要为它分配一个地址,如用另一个变量来存放这个地址,那么这个变量就叫指向变量的指针变量。
指针的定义(type *变量名;)
int *p;
表示该变量的类型是一个指针变量,指针变量名是p而不是*p
如果在同一行定义多个指针变量应该是:int *p1, *p2;而不是int *p1, p2
指针的初始化
type *变量名 = 地址;
例子
#include int main(){ int a = 100; printf("%d\n",&a); int *c = &a; printf("%d\n",c); return 0;}
二、指针变量的使用(如何通过指针变量访问和运算)
指针变量访问
定义一个指针变量,并且指向一个地址
int a = 10;int *p = &a;*p = 100;printf("a:%d\n",a);
指针运算
定义一个指针变量,指向一个地址,并对指针做自增自操作
#include int main(){ int a = 10; int *p = &a; printf("p:%d\n",p); p++; printf("p:%d\n",p); return 0;}
三、数组指针
数组指针
数组指针,见名知意就知道是数组的指针,也就是数组的地址,在定义指针变量时,*变量名一定要带上(),不然就是定义指针数组
int main(){ int array[5] = {1,2,3,4,5}; printf("%d\n",&array); int (*p)[5] = &array; printf("%d\n",p); return 0;}
四、指针数组
指针数组
指针数组,就是存放指针的数组,数组里的元素都是指针,在定义指针数组时,不需要加上(),不然就是定义数组指针
int main(){ int array[5] = {1,2,3,4,5}; int *p[5]; int i; for(i=0;i<5;i++) { p[i] = &array[i]; printf("%d\n",p[i]); } for(i=0;i<5;i++) { printf("%d\n",*p[i]); } return 0;}
五、字符串与指针
字符串的表示形式
数组形式:
char str[] = "I love xdclass"; //栈
字符指针形式:
char *str = "I love xdclass"; //文字常量区
字符指针形式
char *str = "I love xdclass";
因为常量不可修改,所以指针变量指向的字符串内容不可修改,即*str = "xdclass";这样是错误的
修改指针变量的值
char *str2 = "I love the world";str = str2;
例子
int main(){ char string[] = "I love xdclass"; printf("%s\n",string); char *str = "I love xdclass"; char *str2 = "I love the world"; str = str2; printf("%s\n",str); return 0;}
六、怎么使用指针函数
指针函数
函数返回类型是指针,所以就指针函数
例子
#include // 买菜:char* buy(){ char *foods = "鸡蛋"; printf("%s买好了\n",foods); return foods;}// 洗菜void wash(char *foods){ printf("把%s洗干净了\n",foods);}// 炒菜void make(char *foods){ printf("把%s做好了\n",foods);}int main(){ char *foods = buy(); wash(foods); make(foods); return 0;}
七、怎么使用函数指针
函数指针的定义
函数返回值类型 (* 指针变量名) (函数参数列表);
int(*p)(int, int, double, float);
例子
int printfx(int x){ printf("%d\n",x); return 0;}int main(){ printfx(2); int (*p)(int); p = printfx; p(3); return 0;}
八、 什么是指向指针的指针
什么是指向指针的指针?
如果一个指针变量存放的是另一个指针变量的地址,则称这个变量为指向指针的指针变量或指向指针的指针
定义方式
数据类型 **变量名
例子
int main(){ int a = 100; int *p = &a; int **pp = &p; printf("a:%d\n",a); printf("p:%d\n",*p); printf("pp:%d\n",**pp); return 0;}
# Louis讲师 #
- 手把手带你走进指针的世界 -
速戳,观看「C语言教程」!