C语言结构体指针数组小结

第一次写博客,有点小激动。话不多说,进入正题。

c语言最常见的几种东西:结构体,数组,指针和函数。单个定义很好理解,组合在一起就会让人头大。先说函数、数组和指针的组合。

1.函数、数组和指针的组合

  包括指针函数、函数指针、指针数组和数组指针,先从根本上介绍这几者的区别。

为了直观理解,下面具体介绍:

2.数组指针

2.1定义时初始化

数组指针可以认为是替代二位数组的,访问第 i行第 j列的元素有三种方法:

(1)*(*(p+i)+j)

(2)p[i][j]

(3)*(p+j),p++

2.2先定义,后自由赋值

 两种方法的共同点是,由于(*p)[3]只是指定了列数,没有指定行数,所以需要先定义一个行列数都确定的数组,然后让p指向这个数组的首地址,否则会出现如下错误:

这是因为指针p只是被声明,没有定义,所以并没有具体地址,是一个空指针。

如果数组的大小是由变量控制的,此时应该动态分配内存。

对于二维数组,列数也除了写一个固定值,也可以是一个const类型的变量

3.指针数组

  指针数组是存放指针变量的数组,也可以理解为存放了一堆地址。

4、函数指针

函数指针是一个指针,指向的是一个函数

/

5.指针函数

指针函数是一个函数,返回值是一个指针型变量,即地址。

指针函数的作用一般是解决函数无法返回一组数据的问题,将所需的一组数存放到数组里,然后返回数组的首地址。

6.结构体指针数组

指针数组存放的地址可能代表int,double等等类型的数据,当数据类型是结构体时,就是结构体指针数组

7.总结

(1)只要是和指针相关的,必须初始化,否则会报错,新手经常忽略这个问题导致浪费大量时间,本人深有体会。

(2)按照中国人的习惯,AB组合词汇,B是主体,A是修饰,所以函数指针是一个指针,指向的是函数的地址;指针函数是一个函数,返回值是一个指针;同理,指针数组是一个数组,数组里面存放的指针变量即地址;数组指针是一个指针,指向的是二维数组每一行的首地址。

(3)如何直观区分指针数组和数组指针,看有无括号,有括号的(*p)[3],指针在括号里面说明这是个指针,后面有数组,那就是数组指针,函数指针也一样。*p[3]没有括号,那就是数组,数组里面存放的指针变量。

 

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页