指针进阶:
①指针就是个变量,用来存放地址,地址唯一标识一块内存空间;
②指针大小是固定的4/8个字节(32位/64位平台);
③指针是有类型,指针的类型决定了指针+-整数的步长,指针解引用操作的权限;
④指针的运算。
1、字符指针;
2、指针数组;
3、数组指针;
4、数组传参和指针传参;
5、函数指针;
6、函数指针数组;
7、指向函数指针数组的指针;
8、回调函数
9、指针和数组面试题
1、字符指针:
类型一:
#include<stdio.h>
int main()
{
char ch[] = "abcdef";
char* p = ch;
// printf("%c\n", *p);
printf("%s\n", p);
printf("%s\n", ch);
return 0;
}
代码实现:
类型二:
#include<stdio.h>
int main()
{
const char* p = "abcdef";
//char* p = "abcdef";
printf("%s\n", p);
return 0;
}
代码实现:
试题1:因为arr1与arr2两个数组的存储, 都要开辟一个空间;而arr1与arr2分别代表两个数组的首元素地址。
#include<stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
if (arr1 == arr2)
{
printf("hehe\n");
}
else
{
printf("haha");
}
return 0;
}
代码实现:
试题2:建立两个指针p、q,但是他们指向的都是“abcdef”这个字符串,所以它们两个符合p==q
#include<stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
const char* p = "abcdef";
const char* q = "abcdef";
if (p == q)
{
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
代码实现:
2、指针数组
实质:数组
int arr[5]={0}; 整形数组
char ch[4]={0}; 字符数组
int* parr; 指针数组——存放整形指针的数组
char* pch; 指针数组——存放字符指针的数组
指针数组解析:
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int* arr[4] = { &a, &b, &c, &d };
int i = 0;
for (i = 0;