指针搞都不懂,好意思说自己会C语言?
C语言面试必问知识点之「指针」
一、指针相关概念
指针变量
指针的定义(type *变量名;)
int *p;
表示该变量的类型是一个指针变量,指针变量名是p而不是*p
如果在同一行定义多个指针变量应该是:int *p1, *p2;而不是int *p1, p2
指针的初始化
type *变量名 = 地址;
例子
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
// 买菜:
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讲师 #
- 手把手带你走进指针的世界 -