欢迎光临散文网 会员登陆 & 注册

一片搞定C语言难点--函数、指针、数组【指针篇上】//其他的不用仔细了解没必要

2023-04-06 20:40 作者:圣母和正负喜欢没办法  | 我要投稿

有人问为什么要学C。

荒唐---P2P的磁力高速共享,Linux操作系统都是我们要征服的大海,打工做重复操作谁不会?

3.1 地址和指针

变量内存空间分布

图1

现在定义指针变量

&c:即取变量c的地址

就是取变量c的地址赋给pp存放的是地址,这个地址值800,那么指针p就是指向变量c

是对的,此时*p指向变量cp才是指向&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

二级指针&指针数组实例

图1

!!! **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列,如下图

图1



一片搞定C语言难点--函数、指针、数组【指针篇上】//其他的不用仔细了解没必要的评论 (共 条)

分享到微博请遵守国家法律