62.1地址和指针的概念 93变量值的存取一通过变量在内存中的地址进行 系统执行“ scanf(%d&num);”和“ printf(℃'num-%dn;num)2时, 程 存取变量num值的方式可以有两种: ()接访问一直接利用变量的地址进行存取 上例中sanf9d3&num)的执行过程是这样的 计用变量名um作为索引值,检索符号表,找到变量mm的起始地 址3000;然后将键盘输入的值(假设为3)送到内存单元3000 和3001中。 print("num-%dn"num)的执行过程,与scan)很相似 60 首先找到变量num的起始地址3000,然后从3000和3001中取出其 值,最后将它输出。 环 境 返回本节目录
6.2.1 地址和指针的概念 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 3.变量值的存取──通过变量在内存中的地址进行 系统执行“scanf(”%d“,&num);”和“printf(”num=%d\n“, num);”时, 存取变量num值的方式可以有两种: (1)直接访问──直接利用变量的地址进行存取 上例中scanf(“%d”,&num)的执行过程是这样的: 用变量名num作为索引值,检索符号表,找到变量num的起始地 址3000;然后将键盘输入的值(假设为3)送到内存单元3000 和3001中。 printf("num=%d\n",num)的执行过程,与scanf( )很相似: 首先找到变量num的起始地址3000,然后从3000和3001中取出其 值,最后将它输出。 返回本节目录
62.1地址和指针的概念 (2)间接访问——通过另一变量访问该变量的值 C语言规定:在程序中可以定义一种特殊的变量(称为指针变量) 用来存放其它变量的地址。 序设计 例如,假设定义了这样一个指针变量 num pointer,它被分配到 4000、4001单元,其值可通过赋值语句“ num pointer-#” 得到。此时,指针变量 num pointer的值就是变量num在内存中的 起始地址3000。 【例52】中 print“min=%d,max=%dⅦn?,*numl_p,*num2_p);语 句:通过指针变量,间接访问变量的值。 60 环 境 返回本节目录
6.2.1 地址和指针的概念 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) (2)间接访问──通过另一变量访问该变量的值 C语言规定:在程序中可以定义一种特殊的变量(称为指针变量), 用来存放其它变量的地址。 例如,假设定义了这样一个指针变量num_pointer,它被分配到 4000、4001单元,其值可通过赋值语句“num_pointer=#” 得到。此时,指针变量num_pointer的值就是变量num在内存中的 起始地址3000。 【例5.2】中printf(“min=%d, max=%d\n”, *num1_p, *num2_p); 语 句:通过指针变量,间接访问变量的值。 返回本节目录
622指向变量的指针变量 1指针与指针变量 (1)指针—即地址 程 一个变量的地址称为该变量的指针。通过变量的指针能够找到该变量。 (2)指针变量—专门用于存储其它变量地址的变量 序|指针变量 num pointer的值就是变量mum的地址。指针与指针变量的区别,就是变量 值与变量的区别。 (3)为表示指针变量和它指向的变量之间的关系,用指针运算符“*”表示。 例如,指针变量 num pointer与它所指向的变量num的关系,表示为: * num pointer,即* num pointer等价于变量num 因此,下面两个语句的作用相同: num=3 *将3直接赋给变量num* 60 num pointer=#/使 num pointer指向num*/ num pointer=3 /*将3赋给指针变量 num pointer所指向的变量* 环 境 返回本节目录
6.2.2 指向变量的指针变量 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本节目录 1.指针与指针变量 (1)指针──即地址 一个变量的地址称为该变量的指针。通过变量的指针能够找到该变量。 (2)指针变量──专门用于存储其它变量地址的变量 指针变量num_pointer的值就是变量num的地址。指针与指针变量的区别,就是变量 值与变量的区别。 (3)为表示指针变量和它指向的变量之间的关系,用指针运算符“*”表示。 例如,指针变量num_pointer与它所指向的变量num的关系,表示为: *num_pointer,即*num_pointer等价于变量num。 因此,下面两个语句的作用相同: num=3; /*将3直接赋给变量num*/ num_pointer=# /*使num_pointer指向num */ *num_pointer=3; /*将3赋给指针变量num_pointer所指向的变量*/
622指向变量的指针变量 2指针变量的定义与应用 【例6.1】程序中头三行的变量定义语句——指针变量的定义 与一般变量的定义相比,除变量名前多了一个星号“*”(指针变量的定义标识 序设计 符)外,其余一样: 序|数据类型*指针变量L*指针变量2…… 注意:此时的指针变量pint、p_f、pch,并未指向某个具体的变量(称指针是悬 空的)。使用悬空指针很容易破坏系统,导致系统瘫痪。 【例6.1】中间三行的赋值语句—取地址运算(&) 取地址运算的格式:&变量 例如,& cnum int、&numf、& num ch的结果,分别为变量 num int、numf、 num ch的地址。 60 注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址 C语言中用NULL表示空指针。若有语句: P=NULL 则表示指针p为空,没有指向任何对象。 环 境 返回不目录
6.2.2 指向变量的指针变量 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本节目录 2.指针变量的定义与应用 【例6.1】 程序中头三行的变量定义语句──指针变量的定义 与一般变量的定义相比,除变量名前多了一个星号“*” (指针变量的定义标识 符)外,其余一样: 数据类型 *指针变量[, *指针变量2……]; 注意:此时的指针变量p_int、p_f、p_ch,并未指向某个具体的变量(称指针是悬 空的)。使用悬空指针很容易破坏系统,导致系统瘫痪。 【例6.1】中间三行的赋值语句──取地址运算(&) 取地址运算的格式: &变量 例如,&num_int、&num_f、&num_ch的结果,分别为变量num_int、num_f、 num_ch的地址。 注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。 C语言中用NULL表示空指针。若有语句: p=NULL; 则表示指针p为空,没有指向任何对象
63指针与数组 66.3.1指向数组元素的指针 63.2通过指针引用数组元素 633数组名作函数参数 6.3.4指针与宇符数组 60 63.5数组指针
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章目录 6.3.2 通过指针引用数组元素 6.3.1 指向数组元素的指针 6.3 指针与数组 6.3.3 数组名作函数参数 6.3.4 指针与字符数组 6.3.5 数组指针