浅谈C语言中指针的用法


2指针 的概 念
内 存 空 间 是 以 字 节 (y ) b t 为单 位 用 来 存 储 数 据 的 一 段 区 城 , e 其 中每 一个 字 节 都 有 一 个 编号 , 编 号 称 为该 字 节 的地 址 。 不 同 该 的数 据 在 内 存 中被 分 配 的 字 节 数 一 般 是 不 相 同 的 , 样 对 每 一 种 这 数 据 就 对 应 着 若 干 个 地 址 编 号 . 些 地 址 中 第 一 个 字 节 的地 址 就 这 称 为 该 数 据 的指 针 , 储 该 指 针 的变 量 就 称 为 指 向该 数 据 的 指 针 存 变 量 。 如 下 图 1所示 ,0 o和 1 0 10 0 2是 变 量 a b的 指 针 , 两 个 指 , 这 针 值 在 变 量 p i lpit on 、on2中存 储 , 以 p i l p i 2是 指 向 a t 所 on 和 on t t 、 b的 指 针 变 量 , 、 a b是 p it 、 o t o l p i 2的 目标 变 量 ,0 0和 2 0 n n 20 0 2是 pit、o t o l pi 2的指 针 。 指针 变 量 pit n n o l和 pit 指 向关 系如 图 n o 2的 n
、 研

维普资讯
究 开 发 . .. . . .
电 脑 知 识 与 技 术
浅谈 C语言 中指针 的用法
刘 平 。赵 焕 平
( 阳理 工 学 院计 算 机 科 学 与技 术 系 , 南 南 阳 43 0 ) 南 河 7 00 摘 要 : 针 是 C 语 言的 核 心 。利 用 它 可 以表 示 多种 数 据 结构 , 指针 与普 通 变 量 、 组 、 指 把 数 函数 结合 可 以设 计 出灵 活 高效 的 程 序 。本 文 针 对 指针 的 这 些 常 见 用 法进 行 了具 体 的 分析
a ry nd f ton C k a o a sw hih sa  ̄ t d e iin , i spa ra ayz st e fm iira phc to o nt rc ra a unபைடு நூலகம் i a m e m ny pr grm n a c i g y a f ce tTh pe l e a l p n n h a a n fpoi e once ey i r tl
2所 示 。
2 O ∞ 2 2 ∞
向 前 , 的 内容 是 随 机 的地 址 , 能 是 操 作 系 统 或 其 它 用 户 区 的 它 可 某 一 内 存 地 址 , 运 行 程 序 时 , 可 能 使 不 属 于 本 程 序 的某 个 内 当 很 存 内容 被修 改 , 而 造 成 整 个 系 统 的 崩溃 。 从 32 .. 针 变 量 的类 型与 其 目标 变 量定 义 的 类 型 不 符 : 2指 C语 言 规 定 一 个 指 针变 量 只 能指 向 同一 类 型 的变 量 。 如 :o bem; t 例 du l i n p &m; 误 。 = 错 323指 针 的错 误 赋值 :指 针 变 量 的值 是 某 个 数 据 的 地址 , .- 对 指 针 赋 值 , 赋 值 号 右边 的 应 是 所 指 对 象 的 地 址 . 能 是 普 通 整 在 不 型 数 据 。 例 如 : t p l0 ; 误 。 i *=O0 错 n 3 . 3指 向一 维 数 组 的 指 针 变 量 定 义 形 式 : 型标 识 符 指针 变量 名 ; 类 将 具 有 相 同类 型 的数 组 元 素 地 址 赋 予 指 针 变 量 , 此 指 针 变 则 量 就 成 为 此 数 组 的 指 针 变量 。 如 : t m 5 {,,45 ; t = 例 i [】 1 3 ,li p m; n = 2, n 数 组 名 表 示 该 数 组 在 内存 中 的起 始 地 址 , 以 上 述 中 的指 针 所 变 量 P就 指 向 了第 一 个 元 素 m[ , 可 以表 示 为 it = f1在 O 也 1 n p &m 0; 此 基 础 上 p i 指 向 了 元 素 m[ , 里 i 示 从 P 当前 的 位 置 向 +就 i这 1 表 后 移 i 元 素 , 正 移 动 的 字 节 数 应 该 是 : s ef数 组 的 类 型 ) 个 真 i i o( *z 。 其 指 向关 系如 下 图 3所 示 : 34指 向 二维 数 组 的指 针 变 量 . 二 维 数 组 为 了 方 便 理 解 , 以 把 它 看 作 是 一 个 嵌 套 的 一 维 数 可 组 。例 如 : t [1 】“ , , ,l{ , , ,l{ ,0 l ,2l定 义 了 i 31 = 12 3 4 , 6 7 8 , 1 ,l 1 1; na 4 5 9 个 3行 4列 的二 维 数 组 。如 果 把 一 行 看 作 一 个 整 体 的 话 , 以 可 理解 为 : 组 a 一 个 含 有 3个 元 素 a 1al、[ 的一 维 数 组 。 数 是 【 、【1a 1 0 2 而 每个 元 素 本身 又是 一 个 含 有 4个 元 素 的一 维 数 组 。 如 图 4所示 :

K yw rsC—a gae o tr o t ai l; jc o o t e od : — n ug; i e; i e vr be bet f i e l p n pn r a o pn r
1引 言
C 言是 使 用 最 广 泛 的 程 序 设 计 语 言 之 一 ,它 既 有 其 它 高 级 语 语 言 的优 点 , 有 低 级 语 言 的 许 多 特 点 , 用 起 来 灵 活 方 便 , 广 又 使 被 大 计 算 机 爱 好 者 及 程 序 员 所 喜 爱 。 但 是 由 于 它 的灵 活 性 较 强 , 涉 及 的概 念 较 多 ,对 初 学 者 来 说 学 习它 是 有 一 定 困 难 的 。特 别 是 c 语 言 中 的 指 针 , C语 言 的 主 要 特 色 之 一 , 确 而 灵 活 地 运 用 它 是 正 可 以 有 效 地 表 示 复 杂 的 数 据 结 构 : 动 态 分 配 内存 : 够 方 便 地 能 能 使 用 字 符 串 ; 效 而 方 便 地 使 用 数 组 : 调 用 函 数 时 能 够 得 到 多 有 在 个 返 回值 : 直 接 处 理 内存 地 址 等 。 能
Ab t c : i tr i t e c r fC—ln u g , e c n u e p i tr t x r s ma i l aa s u t r s py n o tr t o s r t n e s h o e o a Po a g a eW a s o e o e p es n n f d d t t c e. o r u Ap l ig p i e O c mm o a ibe n n v r l、 a
关 键词 : 语 言 ; C 指针 ; 针 变量 ; 针 指 向 指 指
中图分类号 : 3 2 TP 1
文献标识码 : A
文章编号 :0 9 3 4 (0 62 — 1 6 0 10 - 0 42 0 )0 0 6 — 1
LI ng,ZH AO ua U Pi H n—pi ng
Dic s h piain o itri a g a e s u st e Ap l t fPone C-ln u g c o n
( p r n f mp tr c n e T c n lg , n a g Is tt o e h oo , n a g4 3 0 , hn ) De a me t t o Co ue i c & e h oo yNa yn tue f c lg Na y n 7 0 0C a Se ni T n y i
合集下载

浅谈C语言程序设计中的指针

浅谈C语言程序设计中的指针

i nt a r ay[10] ; r
i nt * Pa :
a & P 二 : a i n t * * Pt r 级Pa :
*pt r 级b宝
P a二 r r s y : a
从语法的角度看,把指针声明语句里的指针名和名字左边的指针声明 符*去掉,剩下的部分就是这个指针所指向的类型。例一中指针所指向的
一、指针的橄念
指针是一个特殊的变量, 它的值是内存的一个地址。要理解指针需要 理解三方面的内容: 指针的类型,指针所指向的类型,指针的值或者叫指 针所指向的内存区。下面举例说明。例一: ( 1) i nt *pt r : ( 2) char*pt r ; ( 3) i nt (知t r ) [3] : (4) i nt * ( *pt r ) [4] : (一) 指针的类型 从语法的角度看,把指针声明语句里的指针名去掉,剩下的部分就是 这个指针的类型。这是指针本身所具有的类型。例一中各指针的类型如下: ( 1) int *pt r ; / * 指针的类型是i nt * */ (2) cha *pt r : r * / 指针的类型是char* */ (3) 加t ( *pt r ) [3] ; / * 指针的 类型是i nt (*) 〔 3] */ (4) int * (知t r ) [4] : / * 指针的类 型是i nt * ( *) [4] */ ( 二) 指针所指向的类型 当通过指针来访问指针所指向的内存区时,指针所指向的内存区存储
指针。举例如下: 例五:
( 三) 指针的值 指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,
i nt ar r ay[10]二 {0,1,2,3,4,5,6,7,8,9},value;
而不是一般的数值。指针所指向的内存区就是从指针的值所代表的那个内 存地址开始,长度为s z o ( 指针所指向的类型) 的一片内存区。如果一 i e f 个指针的值是x ,就相当于该指针指向了以联为首地址的一片内存区域。 x 二、指针的茸术运, 指针可以加上或减去一个整数,这和C语言中的算术表达式意义是不 同的. 例二: ( 1) int a [20] ; (2) i nt 却t r二; (3) …… (4) pt r + : a 在上例中,指针pt 的类型是i t *,它指向的类型是i n ,它被初始 r n t 化为指向数组a 的起始地址,接下来的第4句中,指针pt 被加了1,编译器 r 编译程序时把指针pt r 的值加上了si zeof ( int ) . 由于i n 型在3 位机中的长度是四个字节,故原来pt 指向 t 2 r 数组第0号 单元开始的四个字节, 此时指向 数组从第4号单元开始的四个字节。 三、运算符&和. 几 是取地址运算符, *是指针运算符或称为间接访问运算符. & 的运算 a 结果是一个地址,即变量a 的地址. *p为指针变量p所指向的存储单元的 内容,即p所指向的变量的值. 下面举例说明。 例三:

函数指针的用法

函数指针的用法

函数指针的用法函数指针是一种指向函数的指针变量,它可以用来间接调用函数。

在C语言中,函数指针通常用于回调函数、动态函数调用等领域。

以下是函数指针的用法:1. 声明函数指针函数指针的声明格式为:返回类型 (*指针变量名)(参数类型列表)。

例如,int (*p)(int, int) 表示 p 是一个指向返回类型为 int,参数类型为 int, int 的函数指针。

2. 定义函数指针定义函数指针时,需要将其指向具体的函数。

例如:int add(int a, int b) {return a + b;}int (*p)(int, int) = add;上述代码定义了一个指针变量 p,它指向函数 add。

这样,我们就可以通过 p 间接调用 add 函数,例如 p(1, 2)。

3. 函数指针作为参数函数指针还可以作为函数的参数。

这种用法通常用于回调函数。

例如:void forEach(int* arr, int length, int (*callback)(int)) {for (int i = 0; i < length; i++) {arr[i] = callback(arr[i]);}}上述代码定义了一个函数 forEach,它接受一个 int 类型的数组和一个函数指针 callback,用于对数组中的每个元素进行操作。

其中,callback 函数的返回值是 int。

这样,我们就可以通过forEach 函数调用不同的 callback 函数,实现不同的操作。

4. 函数指针数组函数指针还可以放在数组中,形成函数指针数组。

例如:int add(int a, int b) {return a + b;}int sub(int a, int b) {return a - b;}int (*funcs[2])(int, int) = {add, sub};上述代码定义了一个名为 funcs 的函数指针数组,它包含两个元素,分别指向 add 函数和 sub 函数。

c语言指针 通俗易懂讲解

c语言指针 通俗易懂讲解

c语言指针通俗易懂讲解C语言是一门广泛使用的编程语言,而指针是C语言中的一个重要概念。

指针在C语言中具有非常重要的作用,它能够使我们更灵活地操作内存和数据。

但是,对于初学者来说,指针可能会是一个难以理解的概念。

因此,本文将以通俗易懂的方式解释C语言指针的概念和用法。

首先,我们来解释指针的基本概念。

在C语言中,指针是一个变量,其存储的值是内存地址。

你可以将指针看作是指向内存中某个特定位置的“指针”,通过这个指针,我们可以访问和修改该内存位置上的数据。

这个地址可以是任何数据类型,例如整数、字符、数组等。

那么,我们为什么要使用指针呢?使用指针有很多好处。

首先,通过指针,我们可以节省内存空间。

指针可以传递地址,而不是复制整个数据。

其次,指针能够使我们在函数之间传递数据更加高效。

当我们将指针作为参数传递给函数时,可以直接在函数内部修改传递进来的数据,而无需进行数据的复制。

最后,指针还可以用于动态分配内存,使我们能够更灵活地管理和操作内存。

接下来,我们来看一些指针的常见用法。

首先是指针的声明和初始化。

要声明一个指针变量,我们需要在变量前面加上“*”符号。

例如,int *ptr; 声明了一个指向整数的指针变量ptr。

要初始化指针,我们可以将其指向一个已存在的变量或者使用动态内存分配函数(例如malloc())进行初始化。

然后是指针的使用。

使用指针时,我们可以通过“*”运算符来访问指针所指向的值。

例如,*ptr将访问ptr指针指向的整数值。

我们还可以使用“&”运算符来获得变量的地址,例如,&num将返回变量num的地址。

另一个常见的指针用法是指针和数组的结合。

在C语言中,数组名称本质上是一个指向数组第一个元素的指针。

因此,我们可以使用指针来遍历数组中的元素,或者通过指针传递数组给函数。

我们还可以使用指针和结构体一起工作。

指针可以指向结构体,这使得我们能够动态创建结构体对象,并在需要时进行修改或访问。

浅谈C语言中指针的概念及基本应用规律

浅谈C语言中指针的概念及基本应用规律
分地 表 现 自己 。
( 1 ) 定义指针后, 必须将其初始 化。 可以用做给指针变 量初
始化 的有变量 的地 址, 另一个指针变量 , 数 组名 , 函数名等 。 需
语句不起作用。 此时, s t r 手 旨 向的存储区里是什么? 我们不知道。
要注意的是动态 内存分配 时, 使用之前将其初始化为N U L L 。 指针在 定义之后, 如果没有 明确 赋值, 那么和其他 变量类 似, 其 内部 的地 址值 是随机 的。 此时指针指 向的空 间中的数据 意义是不可预 测的, 一般 成为野指针。 我们知道在c 语言 中, 指
r e e 或d e l e t e 释放该 内存块 , 否则 , 这块 内存 就不能被 量也必 须为指针, 且 应与返 回值的类 型相同。 指针变 量可 以指 的调用f 再 次使用 , 我们就 说这块 内存泄漏 了。 使 用指针 时, 在赋值 等 向整型变量、 字符 串变 量、 也可以指 向函数 的入 口地址和指针为
函数调用结束后系统会 自动收回 内存 。 的不 同是, 指针数组在指 针的数量 上有所 改变 , 它 由一 个指针 分配局部动态 变量等 , 全局数据 区存放的是静态和全局变量 , 随着程 序的消亡而 自动 演 变到一组同类 指针。
一般 我们 常说的内存 泄漏是指堆 内存 的泄 漏。 堆 ( 2 ) 指针 函数与函数 指针。 指 针函数 是 返回值 为指 针 的函 收收 回内存。 大小任 意的( 内存块的大小可以 数, 指针 函数 打破 了其它高级 语言中的指针、 数组不能作为返 内存 是指 程序从堆 区中分配的,
写程序还是有很大帮助的。 笔者从几个方面来剖析指针 的本质, 并着重围绕指针的一个重要应用一一动态分配内存来谈谈如何回避常见错

c语言中指针用法

c语言中指针用法

1) 运算符 :*
该运算符作用在指针变量上,表示访问指针
变量所指向的数据对象编。辑课件
22
2)作用:
实现对指针所指向的数据对象的间接访问, 包括引用和赋值等基本运算。
例6-6 下面的程序段包含着对指针的间接访问。
int a,b=2,c,*p; …… p=&b; scanf("%d",&a); c=a+*p;
1.指针的赋值
操作指针之前必须赋予确定的值,可以在 定义指针的同时赋予初值,也可以用赋值表达 式对指针变量赋值。
(1)赋空值(NULL); (2)赋予某个变量的地址。 (3)将一个指针变量的值赋予另一指针变量。
例如:int grade,*p; 编辑课件
16
p=&grade;
2.指针的加减运算
1)运算符:+、-、++、-- 。
--:原地址减去一个地址单位(基类型的实际字 节数);
例如: int *iptr; …… iptr++;// iptr=iptr+1,向下移动两个字节 iptr--;// iptr=iptr-1,向上移动两个字节
下图给出指针的移动示编意辑课:件
19
3. 取地址运算
1) 运算符:& 2) 作用:获取数据对象的内存地址,如果是结 构数据对象则获取其内存首地址。
重点:
➢ 指针的概念 ➢ 指针运算; ➢ 内存操作函数和动态存储分配。
课堂时数:6—7学时 上机时数:2—3学时 课外上机时数:2—3学时
编辑课件
2
6.1 指针的概念
1. 什么叫指针
一个数据对象的内存地址称为该数据对象 的指针 。

c语言 指针的指针 用法详解

c语言 指针的指针 用法详解

c语言指针的指针用法详解在C语言中,指针是非常重要的一种数据类型。

而指针的指针是指指向指针变量的指针。

它在C语言中也是非常重要的一种数据类型,经常用于动态内存分配和函数传递参数等方面。

下面,我们来详细介绍一下指针的指针在C语言中的用法。

一、指针的基本概念在C语言中,指针是一个变量,用来表示另一个变量的内存地址。

指针变量可以存储任何数据类型的地址,包括整型、字符型、浮点型等。

使用指针可以实现动态内存分配、函数传递参数等功能。

二、指针的指针的概念指针的指针是指指向指针变量的指针。

它的定义方式如下:```int **p;```其中,p是一个指向指针的指针变量,它可以指向一个指针变量的地址。

三、指针的指针的用法指针的指针在C语言中有很多用途,下面列举几个比较常见的用法。

1.动态内存分配在C语言中,可以使用malloc函数动态分配内存,该函数返回的是一个指向分配内存的首地址的指针。

而在一些情况下,需要动态分配二维数组或者指针数组,这时就需要使用指针的指针了。

例如:```int **p;int i,j;p=(int **)malloc(sizeof(int*)*3);//分配3个指向int类型指针的指针变量for(i=0;i<3;i++){p[i]=(int*)malloc(sizeof(int)*4);//分配4个int类型的变量}for(i=0;i<3;i++){for(j=0;j<4;j++){p[i][j]=i*j;//为p[i][j]赋值}}```上述代码中,先使用malloc函数分配3个指向int类型指针的变量,然后再用循环分别为这3个变量分配4个int类型的变量。

最后,再使用嵌套循环为二维数组赋值。

2.函数传递参数在C语言中,函数可以通过指针传递参数。

指针的指针也可以用于函数传递参数,可以使函数返回多个值。

例如:```void fun(int **p){*p=(int*)malloc(sizeof(int)*4);//为指针p分配4个int类型的变量(*p)[0]=10;(*p)[1]=20;(*p)[2]=30;(*p)[3]=40;}int main(){int *p;fun(&p);//传递p的地址printf("%d %d %d %d\n",p[0],p[1],p[2],p[3]);free(p);//释放内存return 0;}```上述代码中,定义了一个指针类型的函数fun,在函数中通过指针的指针为指针p分配4个int类型的变量,并为这4个变量赋值。

c语言中的指针详解

c语言中的指针详解在C语言中,指针是一种特殊的变量类型,它存储了一个变量的内存地址。

通过指针,我们可以间接访问和修改内存中的数据,这对于一些需要动态分配内存的操作非常有用。

以下是关于C语言指针的一些详细解释:1. 定义指针:使用"*"符号来定义指针变量。

例如,int* ptr; 定义了一个指向整型变量的指针 ptr。

2. 取址操作符(&):取地址操作符(&)用于获取变量的内存地址。

例如,&a 返回变量 a 的地址。

3. 解引用操作符(*):解引用操作符(*)用于访问指针所指向的变量的值。

例如,*ptr 返回指针 ptr 所指向的整型变量的值。

4. 动态内存分配:可以使用相关的库函数(如malloc和calloc)在运行时动态分配内存。

分配的内存可以通过指针来访问和使用,并且在使用完后应该使用free函数将其释放。

5. 空指针:空指针是一个特殊的指针值,表示指针不指向任何有效的内存地址。

可以将指针初始化为NULL来表示空指针。

6. 指针和数组:指针和数组在C语言中有密切的关系。

可以通过指针来访问数组元素,并且可以使用指针进行指针算术运算来遍历数组。

7. 传递指针给函数:可以将指针作为函数参数传递,以便在函数内部修改实际参数的值。

这种传递方式可以避免拷贝大量的数据,提高程序的效率。

8. 指针和字符串:字符串在C语言中实际上是以字符数组的形式表示的。

可以使用指针来访问和操作字符串。

需要注意的是,指针在使用时需要小心,因为不正确的操作可能导致程序崩溃或产生不可预料的结果。

对于初学者来说,理解指针的概念和使用方法可能需要一些时间和练习。

C语言中指针的用法

式 ( p i+) ( [+ ) 表 示 。引 用 a Il 地 址 可 以 用 p (+ )j或 pi j来 ] [[的 iJ (+

it m = n 28,, & m; n p
i+ 或 pi j 示 ; 针 名 P与 二 维 数 组 名 a 然 都 代 表 “ 指 1 j 【+ 表 J 指 虽 行

在 C语 言 中 , 针 与 数 组 有 着 十 分 密 切 的 联 系 。 可 以 说 程 指
序 中凡 是用 数组处理 的算法都 可以通过指 针实现 , 而且速度要
比 下 标 法 快得 多 。
的 内 存 地 址 : 一 个 变 量 在 内存 中对 应 一 个 单 元 地 址 , 常 把 通 在 C 言 中 , 针 定 义 的 一 般 形式 为 : 型 说 明 符 时旨 语 指 类 针名 。 与 其 他 程 序 设 计 语 言 有 所 不 同 , 言 允 许 使 用 变 量 的 地 址 C语
这个地址称为指针。
1 针 与 一 维 数 组 。 假 设 有 定 义 语 句 : t a10,p a将 . 指 i [O ] = ; n 数 组 a 首 地 址 赋 予 了 指 针 变 量 P, 就 使 指 针 变 量 P 向 了 的 这 指
数组 a 的第一 个分 量 40: 由于 数组 的存储 结构 是连续 的 , 1 即 数组 元 素在 内存 中是连 续存 放 的 , 因此 a i 是 a +就 嘲的存 储地
2 针 变 量 的 引用 。例 子 如 下 。 . 指
man( i )
以下使用规则 : P 是行指针 ,+ 、 + 或 p - p ip + - 均表示指 针移动 的单位是行 ; P
只 能 指 向 二 维 数 组 中的 行 , 不 能 指 向 一 行 中 的 某 个 元 素 , 是 而 但 可 以 通 过 P 用 二 维 数 组 中 的 元 素 , 如 引 用 a删 ] 以 用 表 达 引 例 [ 可

c语言指针函数的用法

c语言指针函数的用法一、引言在C语言中,指针函数是一种特殊类型的函数,它接受一个指针作为参数,或者返回一个指针作为结果。

通过使用指针函数,我们可以更灵活地操作内存,实现对数据类型的深入理解和掌握。

本篇文章将详细介绍指针函数的定义、调用以及注意事项。

二、指针函数的定义1. 定义形式:类型 * 函数名(参数列表) { 函数体 }2. 说明:类型是指针所指向的数据类型;* 表示这是一个指针函数,即该函数接收一个指针作为参数或者返回一个指针;函数名是自定义的名称,需要符合C语言命名规范;参数列表表示函数的输入参数,可以有多个;函数体包含了函数的功能实现。

三、指针函数的调用1. 形式:指针变量 = 函数名(参数列表);2. 说明:首先需要声明一个合适的指针变量,然后将该变量传递给指针函数,函数执行完毕后,指针变量的值会发生改变。

【示例代码】假设有一个整数数组arr[],我们要找到其中最大的元素并返回其索引。

可以定义一个指向函数的指针变量fp,并将它传递给一个指针函数max_index来找到最大元素的索引。

代码如下:int *fp;int max_index(int *arr, int n) {int *max = arr; // 假设第一个元素是最大值for (int i = 1; i < n; i++) {if (*(arr + i) > *max) { // 比较当前元素与最大值的大小max = arr + i; // 更新最大值}}return max; // 返回最大值的地址}fp = max_index; // 将max_index函数的地址赋值给fpprintf("最大元素的索引为:%d\n", fp); // 调用fp即可输出最大元素的索引四、注意事项1. 指针函数不能没有返回值,否则会编译错误。

如果需要返回一个指针,则需要确保返回值指向的空间足够大。

2. 传递给指针函数的参数必须是合适的指针类型,否则会编译错误。

C语言指针用法详解

C语言指针用法详解C语言指针用法详解指针可以说是集C语言精华之所在,一个C语言达人怎么可以不会指针呢。

下面店铺给大家介绍C语言指针用法,欢迎阅读!C语言指针用法详解(1)关于指针与数组的存储a、指针和数组在内存中的存储形式数组p[N]创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。

数组名p本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在于代码中(应该是符号表中),在链接时已经制定好了;而指针*p创建时,对应内存中这个指针变量的空间分配,至于这个空间内填什么值即这个指针变量的值是多少,要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。

b、指针和数组的赋值与初始化根据上文,一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。

如:int p[5];p=p+1; 是不允许的而p[0]=1; 是可以的;//int *p;p=p+1; 是允许的p[0]=1; 是不允许的,因为指针没有初始化;//int i;int *p=&i;p[0]=1; 是允许的;对于字符指针还有比较特殊的情况。

如:char * p="abc";p[0]='d'; 是不允许的为什么初始化了的字符指针不能改变其指向的内容呢?这是因为p 指向的是“常量”字符串,字符串"abc"实际是存储在程序的静态存储区的,因此内容不能改变。

这里常量字符串的地址确定在先,将指针指向其在后。

而char p[]="abc";p[0]='d'; 是允许的这是因为,这个初始化实际上是把常量直接赋值给数组,即写到为数组分配的内存空间。

这里数组内存分配在先,赋值在后。

(2)关于一些表达式的含义char *p, **p, ***p;char p[],p[][],p[][][];char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];能清晰地知道以上表达式的含义吗?(知道的去死!)第一组:char *p, **p, ***p;分别为char指针;char*指针,即指向char*类型数据地址的指针;char**指针,即指向char**类型数据的指针;他们都是占4字节空间的指针。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档