在指针的初阶已接触过指针的概念,并介绍了如下内容
1.指针是个变量,用来存放地址,地址唯一标识一块内存空间,所以地址也形象的被称作指针。
2.指针大小是固定的4/8字节(32位平台/64位平台)。
3.指针是有类型的,类型决定被看待的视角,即决定了 指针 +- 整数 跳过的步长;指针解引用 时的访问权限。
4.指针的运算:指针 +- 整数;指针 - 指针;指针大小比较。
有关这部分内容还有好多细节,我还没写文章,为了使内容连贯后期会考虑补一篇。
这篇文章,将探讨有关指针的高级主题。
正文开始@一个人的乐队
1.字符指针
字符指针有下面两种使用场景:
1.指向字符
2.指向字符串
那么就有这样一道面试题:
小伙伴们先来自己做做做看呐。
#include <stdio.h>
int main()
{
char str1[] = "hello Asi.";
char str2[] = "hello Asi.";
char *str3 = "hello Asi.";
char *str4 = "hello Asi.";
if (str1 == str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if (str3 == str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
解析:
2.指针数组
指针数组即,==存放指针的数组==。
写几段代码,感受一下它的使用:
代码1:
代码2:
代码3:
这里 指针+-整数 的等价思想还是比较有用的。
3.数组指针
数组指针是什么?指针还是数组?
答案是:指针。其实做一个类比就好。
先做一个小小的知识铺垫,其实本来也是该包含在初阶内容之中滴。
即arr与&arr的区别:
定义类比:
这里既然知道了数组指针的概念,就做一道小练习:
问:p的类型应该怎么写?
#include <stdio.h>
int main()
{
int* arr[10] = { 0 };
//p = &arr;
//问:p的类型应该怎么写?
return 0;
}
解析:
数组指针的使用
数组指针用对还是蛮好用的,但用错了那是非常别扭。
错误示范:
那数组指针到底是怎样访问到每个元素的呢?
下面就来看数组指针在二维数组中怎样使用:
介绍了数组指针和指针数组的,我们一起来看看下面代码是什么意思:
int arr[5];
int *parr1[10];
int (*parr2)[10];
int (*parr3[10])[5];
解析:
4.数组传参和指针传参
写代码的时候难免要把【数组】或【指针】传给函数,那函数的参数如何设计呢?
4.1 一维数组传参
4.2 二维数组传参
4.3 一级指针传参
反向思考:当 函数参数 部分是一级指针时候,函数能接收什么参数?
4.4 二级指针传参
反向思考:当 函数参数 部分是二级指针时候,函数能接收什么参数?
未完待续
中篇将介绍:点击直达指针语法中篇@指针进阶 | 函数指针 | 函数指针数组 | 指向函数指针数组的指针
函数指针
- 函数指针数组
- 指向函数指针数组的指针,
下篇将介绍:
回调函数