一片搞定C语言难点--函数、指针、数组【指针篇上】//其他的不用仔细了解没必要
有人问为什么要学C。
荒唐---P2P的磁力高速共享,Linux操作系统都是我们要征服的大海,打工做重复操作谁不会?
3.1 地址和指针
变量内存空间分布

现在定义指针变量
&c:即取变量c的地址
就是取变量c的地址赋给p,p存放的是地址,这个地址值800,那么指针p就是指向变量c。
是对的,此时*p指向变量c,p才是指向&c,所以*p+1就是A的ASCII值加1,就是B。
3.2 定义
数组类型 *指针变量名
一定要初始化指针,否则会出现问题。
上面是一个absolute错的写法。要初始化,直接赋值NULL就行。
实例
结构自己检验,我知道你们不会动手只看没有用。!!!^^!!!
3.3 指针和数组 //二维来了,三维还远吗?
记住这里正规写法:int *p 应该写成 int* p
指向数组的指针加减整数值,可以指向另一个数组元素。但不要超过数组范围。
数组元素按顺序存放
输出方式
数组名不能++、--。a++就是不合法的。
*p++就相当于*(p++),先取p所指向的变量值,再p=p+1。
*++p就是先取p'=p+1,再取p'的值。
3.4 指针数组
类型 *数组名[数组长度]
相当于二级指针。比如*argv[]就是**argv。
二级指针&指针数组实例

!!! **pp 就是 *&a[0] , *&a[0] = a[0]。
i=0,**pp就是a[0],pp++,pp指向p[1],p[1]=&a[1],**pp = *&a[1],就是3。
记住一句话:二级指针不加*就是取一级指针的地址,加*再取一级指针的地址里的值,再加**就是取原地址(这里也是一级指针的地址里的值)里的值。
实例:奇偶数
[ ]优先级高于*。
priority :() >> [] >> *
int (*p)[5] : 数组指针,指向含有5个元素的数组,就是指向一个有5个元素的行首地址,跨行操作,such as : a[0][] a[1][]。
int *p[5] : 指针数组,数组中每个元素指向一个整型变量,表示一维数组里存了5个指针变量,二维操作有很多:* (* (p+i)+j)、(* (p+i) )[j]、p[i][j]、 * (p[i]+j)。
!!!注意
一维是线,a[5] 有5个元素,a[0]a[1]a[2]a[3]a[4]
二维是面,a[3][4] 有3行4列,如下图
