指针进阶(一)(跑路人笔记)(2)

简介: 指针进阶(一)(跑路人笔记)

数组指针

数组指针我们将它理解为指向数组的指针在此之前我们不妨理解一下

&arr 和 arr之间的区别

其实区别很明显:跳跃跨度不同

看图:


image.png

我们的arr+1操作后就只跳跃了一个字节长度(因为是char类型)而我们的&arr+1则跳跃了一个数组的大小。

我们的数组指针就是指向&arr的指针

他继承了&arr相同的跳跃能力

创建方法:


image.png


使用时我们可以将其当做二维指针使用pa[0][10]就指向arr[10]

而pa[0][10]等价与*(*(pa+0)+10)


指针数组

顾名思义这是一个数组

不过这个数组的元素是指针


指针数组的建立

int main()
{
  char* arr[20] = { 0 };
  return 0;
}




要注意的点是他的类型和数组指针类型很像

不过要区分也很简单我们只要记住:

变量名和 * 结合的是指针如数组指针就是将 *和变量名结合如char(*pa)[10],这就创造了一个指向10空间数组的指针。

而指针数组

的创建是char *pa[10]这就是创建了一个10个大小的指针数组。

(指针数组可以将相同类型的指针进行打包在传参时又可以节省很多空间)


函数指针

函数也有他的存储地址


image.png


Add和&Add两者除类型不同之外,在使用中几乎没有不同。


函数指针的创建


image.png


函数指针数组

数组是一个存放相同类型数据的存储空间。

我们已经学习了指针数组,我们类比一下指针数组就可以理解函数指针数组了


函数指针的创建

image.png



与函数指针类似在数组名后加上数组大小即可。


指向函数指针数组的指针

我们把函数都打包到函数指针数组我们传递给其他函数时我们依旧需要函数指针数组的指针。

(其实无论是函数指针数组还是指向函数指针数组的指针都是函数数组和函数数组指针的特殊形式而已。)


指向函数指针数组的指针的创建

void test(const char* str)
{
  printf("%s\n", str);
}
int main()
{
  //函数指针pfun
  void (*pfun)(const char*) = test;
  //函数指针的数组pfunArr
  void (*pfunArr[5])(const char* str);
  pfunArr[0] = test;
  //指向函数指针数组pfunArr的指针ppfunArr
  void (*(*ppfunArr)[5])(const char*) = &pfunArr;
  return 0;
}



当与变量名结合那么这个变量就是指针

当变量名旁有**[ ]时我们的变量名会优先与[ ]结合所以我们要创建指向函数指针数组的指针**时我们需要将变量名和括在一起。


总结

指针进阶远远不止这些博主也不知道会出多少期关于指针进阶。

但作为C语言最重要也最难的内容博主认为出他个7 8 期都是合理的。

OK结束

下一期我会在此理解指针并讲解一下指针的题目。


相关文章
|
1月前
|
C语言
【C语言】指针进阶之sizeof和strlen函数的对比
【C语言】指针进阶之sizeof和strlen函数的对比
|
1月前
|
C语言
C语言---指针进阶
C语言---指针进阶
19 0
|
1月前
|
存储 C语言 C++
C语言指针进阶-1
C语言指针进阶-1
24 1
|
1月前
|
存储 C语言 C++
【指针的进阶】C语言
【指针的进阶】C语言
|
1月前
|
C语言
【C语言进阶】 指针进阶(二)
【C语言进阶】 指针进阶(二)
|
1月前
|
C语言 C++
【C语言进阶】 指针进阶(一)
【C语言进阶】 指针进阶(一)
|
1月前
|
C语言
【C语言】指针进阶之传值调用与传址调用
【C语言】指针进阶之传值调用与传址调用
|
1月前
|
安全 程序员 编译器
[C语言]指针进阶之野指针与assert断言
[C语言]指针进阶之野指针与assert断言
|
1月前
|
存储 C语言
C语言指针进阶-2
C语言指针进阶-2
21 2
|
1月前
|
编译器 C语言
C语言-------指针进阶(2)
C语言-------指针进阶(2)
20 1