第8章 地址和指针
C++程序设计 第八章 指针和引用

第
在程序运行时变量和函数都存放在内存中,通过变量名来访问数据、通过函数名来调用函数都是直接访问方式。还有另一种间接访问方式就是用指针。指针的本质是内存地址。指针往往用于说明函数的形参,使实参能通过指针传递,以提高函数调用的效率。利用指针能动态地使用内存,以提高内存使用效率。指针也能用来表示数据关联,以构成复杂的数据结构。指针是C程序中最常见的类型。引用是C++扩展的新概念,主要用于函数形参和返回类型。本章将详细介绍指针和引用的概念及应用。
首先,这6个变量的地址是按递减次序排列,这是因为局部变量都存储在堆栈中,堆栈是先入后出的。先入栈的数据存放在较大地址位置,后入栈的数据存放在较小地址位置。如果这些变量改为全局变量,它们的排列次序就会颠倒过来。
其次,尽管变量s只占2字节,变量c只占1字节,但却分别占用4字节空间。这是因为按字对齐(32位数据)能提高CPU访问内存的效率,而且一次压栈和出栈操作也是以32位数据为单位,代价是浪费一些内存。如果这些变量改为全局变量,它们将按实际大小存储。
怎样能知道一个变量在运行时刻的内存地址?把取地址运算符&放在变量前面就得到它的首地址。例如b是一个变量,那么&b就表示它的地址。下面例子能看到一组局部变量的首地址。
例8-1显示一组局部变量的首地址。
#include<iostream.h>
void main(){
bool b = true;
char c = 'c';
其中,<类型名>是这个指针变量所指向的对象的类型,简称指针类型,它可以是任何一种类型。*表示这个变量是一个指针变量。这个变量的类型就是“<类型名>*”。<变量名>是一个标识符。指针变量可以进行初始化,等号之后给出一个变量的地址,要求这个变量的类型与指针类型相符。
c语言八1

• int *p,i=10,j; • p=&i; • j=*p;
1.间接访问运算符 * 是单目运算符。 2.运算对象:必须是指针变量或地址。 j=*(&i); 3.作用:*在赋值号的右边时,取指针p 所指向的存储单元的值。(即*p==10)
间接访问运算符
8.4对指针变量的操作
例如有变量定义语句:char a, short int b, float c; 编 译系统给变量分配的存储空间如图8-1所示。
图8.1 变量分配的存储单元与地址
5001 5002 5003 5004 5005 5006 5007
a
b
c
C语言规定,当一个变量占用一个字节时,该字节 的地址就是该变量的地址,如果变量占用连续的 多个字节,那么第一个字节的地址就是该变量的 地址。
int num=100, *p; p = # *p=15;
num 100 15 FF7C
p
FF7C
指针
内存
一个指针变量可以通过以下三种方式获得一 个确定的地址,从而指向一个具体的对象。 (1)通过求地址运算(&)获得地址值 一般格式为: 指针变量名=地址表达式 例如:int k, *p, *q; q=&k;(‘&’为求地址 运算符) 此时,变量k的地址赋予了q,也可以说q指向 了k。
8.1 变量的地址和指针 1.变量及其地址 在C的程序中要定义许多变量,用来保存程序 中用到的数据,包括输入的原始数据、加工的中 间结果及最终数据。C编译系统会根据定义中变 量的类型,为其分配一定字节数的内存空间(如 字符型占1个字节,整型占2字节,实型占4字节, 双精度型占8字节等),此后这个变量的地址也就 确定了。
C语言全国计算机二级等级考试教程第一二章(章节带习题)

2.2 标识符、常量和变量
2.2.3 符号常量
在C语言中,可以用一个符号名来代表一个常量,称为符号常
量。但是这个符号名必须在程序中用(#define)进行特别的“
指定"。 例2.2 计算圆面积和周长,此程序中将如何教大家使用符号常量。
#include “stdio.h” /*包含头文件*/
#define PI 3.14159 /*定义符号常量,符号常量名为PI,用PI来代表3.14159*/
main()
/*主函数,程序的入口*/
{double r,s,l;
/*声明部分,定义了3实型个变量*/
r
r=5.0;
/*给变量r赋值*/
函 s=PI*r*r;
数 体
l=2*PI*r;
/*计算圆的面积*/ /*计算圆的周长*/
s
printf(“s=%f,l=%f\n”,s,l/)*;分别圆的面积和周长*/
/*给变量b赋值*/
数 体
area=a*b;
/*将a*b的结果赋值给变量area*/
printf(“a=%f,b=%f,area=%f\n”,a,b,area/)*;分别输出矩形的两条边长和面积*/
1.2
}
3.6
a=1.200000,b=3.600000,area=4.320000
4.32
注意:
1. C程序由函数组成,一个程序必须有一个且只能有一个主函数(main),C程
a
b
1.5000002.500000 2.5000003.500000
a b
内存空间
2.在程序中,声明变量就是在计算机内存中申请了某个内存单元。对变量 进行赋值,实质上就是把数据存入该变量所代表的存储单元中。
《C语言程序设计》第8章指针

10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)
C语言程序设计知识点—第8章 指针结构体与预处理命令

指针使用示例 2 void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
C 语言程序设计知识点
主讲教师:杨剑
第 8 章:指针、结构体与预处理命令
1. 本章目标
理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 理解结构体的概念和定义 理解预处理指令
2. 内存地址
内存是一个连续编址的空间,每一个存储单元都有一个固定的编号,称为内存地址。 内存地址通常用 16 进制数表示。
C二级 第8章 指针

1.以下定义语句中正确的是A) int a=b=0; B) char A=65+1,b='b';C) float a=1,*b=&a,*c=&b; D) double a=0.0; b=1.1;参考答案:B【解析】A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*b、*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。2.有以下程序#include <stdio.h>void f(int *p,int *q);main(){ int m=1,n=2,*r=&m;f(r, &n);printf("%d,%d",m,n);}void f(int *p,int *q){ p=p+1;*q=*q+1;}程序运行后的输出结果是A) 2,3 B) 1,3 C) 1,4 D) 1,2参考答案:B【解析】在f(int *p,int*q)函数中,执行p=p+1是将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。
因此B选项正确。
3.以下叙述中正确的是A) 如果p是指针变量,则&p是不合法的表达式B) 如果p是指针变量,则*p表示变量p的地址值C) 在对指针进行加、减算术运算时,数字1表示1个存储单元的长度D) 如果p是指针变量,则*p+1和*(p+1)的效果是一样的参考答案:C【解析】B选项中,如果p是指针变量,则*p表示变量p所指向的地址的值;A选项中,如果p是指针变量,则&p表示变量p的地址;D选项中,如果p是指针变量,*p+1表示将p所指的值加上1,而*(p+1)表示的是先将指针右移一位再取所指向变量的值。
因此C选项正确。
4.以下叙述中正确的是A) 基类型不同的指针变量可以相互混用B) 函数的类型不能是指针类型C) 函数的形参类型不能是指针类型D) 设有指针变量为double *p,则p+1 将指针p移动8个字节参考答案:D【解析】B选项中,所谓函数类型是指函数返回值的类型。
c语音 指针
为了使在函数中改变了的变量值能被main函数所用, 可用指针变量作为函数形参,在函数执行过程中使 指针变量所指向的变量值发生变化,如果想通过函 数调用得到n个要改变的值,可以: 1. 在主调函数中设n个变量,用n个指针变量指向他们; 2. 将指针变量作实参, 将这n个变量的地址传给所调 用的函数的形参; 3. 在执行函数的过程中,通过形参指针变量,改变n个 变量的值; 4. 主调函数中就可以使用这些改变了值的变量. 但是不要试图通过改变形参指针的值而使实参指针 的值改变
第十章
式: 内存区的每一个字节有一个编号,这就是“地址” ; 在程序中定义了一个变量,在进行编译时,系统就会给 这个变量分配内存单元 1、“直接访问”: 按变量地址存取变量值 例如: int i,j=6,k; scanf(“%d”,&i); printf(“%d”,i);
void exchange(int *q1,int *q2,int *q3) { void swap(int *pt1,int *pt2); if(*q1<*q2) swap(q1,q2); if(*q1<*q3) swap(q1,q3); if(*q2<*q3) swap(q2,q3); } void swap(int *pt1,int *pt2) { int temp; temp=*pt1; *pt1=*pt2; *pt2=temp; }
例10.4 输入a、b、c 3个整数,按大小顺序输出 #include <stdio.h> void main() { void exchange(int *q1,int *q2,int *q3); int a,b,c,*p1,*p2,*p3; scanf("%d,%d,%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; exchange(p1,p2,p3); printf("%d,%d,%d\n",a,b,c); }
《软件工程专业基础综合(840)》考试大纲
《软件工程专业基础综合(840)》考试大纲江西财经大学软件与通信工程学院第一部分《C程序设计》(占总分30%)参考书目:谭浩强,《C程序设计》(第3版),清华大学出版社2005年第2章数据类型、运算符与表达式【内容】1、C的数据类型2、常量和变量3、整型数据、实型数据、字符型数据4、变量赋初值5、各类数值型数据间的混合运算6、算术运算符和算术表达式7、赋值运算符和赋值表达式8、逗号运算符和逗号表达式【要求】1、掌握C语言的数据类型、常量与变量的概念,掌握标识符的命名规则2、掌握整型数据、实型数据和字符型数据的特点和使用3、掌握变量赋初值的方法4、掌握算术表达式、赋值表达式和逗号表达式的使用方法5、了解各类数值型数据间混合运算时类型转换的方法第3章最简单的C程序设计【内容】1、C语句概述2、程序的三种基本结构3、赋值语句4、数据输入输出的概念及在C语言中的实现5、字符数据的输入输出【要求】1、掌握C语言的分类、三种基本程序结构和赋值语句的使用方法2、掌握printf函数和scanf函数的格式和使用3、掌握字符数据的输入输出函数第4章逻辑运算和判断选取控制【内容】1、关系运算符和关系表达式2、逻辑运算符和逻辑表达式3、if语句和switch语句【要求】1、掌握关系运算符、关系表达式、逻辑运算符和逻辑表达式的使用2、掌握if语句和switch语句的格式和使用3、掌握条件运算符的格式和使用第5章循环控制【内容】1、while、do-while和for语句2、循环的嵌套3、break语句和continue语句【要求】1、掌握while、do-while和for语句的格式和使用2、掌握循环结构程序设计方法第6章数组【内容】1、一维数组的定义和引用2、二维数组的定义和引用3、字符数组、常用字符串处理函数【要求】1、掌握一维数组以及二维数组的定义和使用2、掌握字符串的使用和字符串函数的应用第7章函数【内容】1、函数定义的一般形式2、函数参数和函数的值3、函数的调用4、函数的嵌套调用5、变量的存储类别:自动变量、静态变量、外部变量、寄存器变量【要求】1、掌握函数定义的格式2、掌握函数的形式参数和实际参数以及函数调用时的参数传递3、掌握函数嵌套调用的方法4、掌握自动变量、静态变量、外部变量、寄存器变量的概念和作用域第8章预处理命令【内容】1、宏定义2、文件包含处理【要求】1、掌握宏定义和文件包含处理的使用第9章指针【内容】1、地址和指针的概念2、变量的指针和指向变量的指针变量3、数组的指针和指向数组的指针变量4、字符串的指针和指向字符串的指针变量【要求】1、了解地址和指针的概念2、掌握指针变量的定义及指向简单变量指针的使用方法第10章结构体和共同体【内容】1、结构体变量的定义、引用和初始化2、结构体数组的定义和使用3、指向结构体类型数据的指针4、共用体【要求】1、掌握结构体变量的定义、引用和初始化2、掌握结构体数组的定义和使用3、掌握指向结构体类型数据的指针第二部分《数据结构》(占总分40%)参考书目:严蔚敏,《数据结构》(C语言版),清华大学出版社2007年【考查目标】1. 理解数据结构的基本概念;掌握数据的逻辑结构、存储结构及其差异;实现各种基本操作。
第8章 指针
已说明过,且变量类型应与指针类型一致。
可以用一个已赋初值的指针去初始化另一 个指针变量。 不要用一个局部变量去初始化 static 型指针。
4、间接引用指针
与指针有关的两个运算符 & 取地址运算符 * 实例: 指针运算符(或称“间接引用”运算符)
void main(){
int a=10; int *pointer_1; pointer_1 = &a; cout<< * pointer_1;
第
8.1 指针概念
8章
指针
8.5 const指针
8.6 指针与函数
8.2 指针运算
8.3 指针与数组
8.7 字符指针
8.4 堆内存分配
8.9 命令行参数
本章介绍C++的指针。C++语言拥有在运行时获得变量的地址和操作地址 的能力,这种用来操纵地址的特殊类型变量就是指针,指针对于成功地进 行c++语言程序设计是至关重要的。学习本章后要求能够使用指针,能够用 指针给函数传递参数,理解指针、数组和字符串之间的紧密联系,能够声 明和使用字符串数组,正确理解命令行参数。
值。 实例:ch8_9.txt
【 8.5 const指针】
指向常量的指针(常量指针):
在指针定义语句前加上const,表示指向的对象是常量。 不能通过指针来改变所指对象的值,但指针本身可以改 变,可以指向另外的对象。 例: const int a=78;
const int b=28; int c=18; const int *pi=&a; *pi=58; pi=&b; *pi=68; pi=&c; *pi=88; c=98;
C语言程序设计第四版-8-_谭浩强
产生“地址传递”的效果。
数组做函数的参数时,也是“地址传递”。 被调用函数不能改变实参指针变量的值,但
可以改变实参指针变量所指向的变量的值。
指针变量
阅读例8.2-例8.5,上机调试,观察结果,分
析掌握。
要求能够熟练地掌握指针变量及其指向的变
化过程,能够在纸上画图表达分析过程。
访问数组——指针的又一重要用途
பைடு நூலகம்
p是普通的变量 注意这两个*p1的 含义不同,前者说 明p1为指针变量, 后者表示p1所指向 的变量。
void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; }
指针变量作为函数的参数
指针作实参,对应的形参是指针变量。 C语言的参数传递是“值传递”。 指针变量做参数时,由于其值为变量的地址,
例. 分析以下程序运行结果
int main() { int n1,n2; int *n1_p=&n1, *n2_p=&n2, *pointer; printf("Input n1:"); scanf("%d",n1_p); 两个指针变量交换 printf("Input n2:"); scanf("%d",n2_p); 了它们的值,也就
指针变量的重要作用之一 ——作为函数的参数,实现地址传递
例 函数调用中的值传递
int main() void swap(int p1,int p2) { void swap(int p1,int p2); { int p; int a,b; p=p1; p1=p2; p2=p; scanf("%d,%d",&a,&b); } if(a<b) swap(a,b); printf("%d,%d\n",a,b); 运行结果:a,b没有交换。 原因:C语言中,实参向形参 return 0; 传递数据采用“值传递”, } 形参单独占用内存单元,交
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例8.4(P100) 编写函数order(int *a,int *b),使调用函数中的第 一个实参总是存放两个数中较小的数,第二个参数存放两个数 中较大的数。 #include<stdio.h> void swap(int *x1,int *x2){int t; t=*x1;*x1=*x2;*x2=t;} void order(int *a,int *b){ if(*a>*b) swap(a,b);} void main(){int x,y; printf("Enter x,y:");scanf("%d%d",&x,&y); printf("x=%d y=%d\n",x,y); order(&x,&y); printf("x=%d y=%d\n",x,y);}
2.指针变量的基类型 一个指针变量中存放的是一个存储单元的地址 值。这里的“一”所代表的字节数是不同的:对 整型而言,它代表2个字节;但对实型而言,它就 代表4个字节。这即是不同基类型的含义。后面的 章节中涉及到指针的移动,也就是要对地址进行 增减运算,这时指针移动的最小单位是一个存储 单元,而不是一个字节。因此对于基类型不同的 指针变量,其内容增1、减1所“跨越”的字节数 是不同的。
它们都是单目运算符,优先级高于所有的双目 运算符,它们的结合性均是自右向左。在使用这 两个运算符需要注意以下几点: (1)如果已经执行了“p=&a;”语句,若有 &*p 由于“&”和“*”两个运算符的优先级别相同, 但按自右向左方向结合,因此先运算*p,它就是 变量a,再执行&运算。因此它等同于&a。 (2)*&a的含义是a。因为先进行&a运算,得到a的 地址,再进行*运算,即&a所向的变量,因此*&a 等价于a。 (3)(*p)++相当于a++。注意括号是必要的,如果 没有括号,就成为*(p++),这时使指针变量本身 增1,并不是使p所指的存储单元的值增1。
8.5 函数之间地址值的传递
8.5.1 形参为指针变量时,实参和形参之间的数据传递 若形参为指针类型,调用该函数时,对应的实参必须是基 类型相同的地址值或者是已指向某个存储单元的指针变量。 8.5.2 通过传送地址值,在被调用函数中直接改变调用函 数中的变量的值(通过形参值的改变,改变是实参的值) 8.5.3 函数返回地址值 函数值的类型不仅可以是简单的数据类型,而且还可以是 指针类型。其一般形式为: 类型名 *函数名(形式参数说明列表) 函数的调用形式:p=函数名(实际参数列表),其中p通常是 调用函数中定义的一个指针变量。
8.3 给指针变量赋值
8.3.1 给指针变量赋地址值 (1)通过求地址运算(&——求地址运算符)获得地址值 一般格式为: 指针变量名=地址表达式 例如:int k, *p, *q; q=&k;(变量k的地址赋给q,即p指向k。) (2)通过指针变量获得地址值 通过赋值运算,把一个指针变量的地址值赋给另一个指针变 量,使这两个指针变量指向同一地址。例如p=q;(使指针变量 p中也存放了变量k的地址,即指针变量p和q都指向了变量k。) 注意:在赋值号两边指针变量的基类型必须相同。 (3)通过标准函数获得地址值 可以通过调用库函数malloc和calloc在内存中开辟动态存储单 元,并把所开辟的动态存储单元的地址赋给指针变量。
例8.2(P99) 编写函数myadd(int * a,int *b),函数中把指 针a和b所指的存储单元中的两个值相加,然后将和值作为 函数值返回。在主函数中输入两个数给变量,把变量地址 作为实参,传送给对应形参。 #include<stdio.h>//形参调用时分配存储空间,调用完毕 后释放存储空间 int myadd(int *a,int *b){ int sum; sum=*a+*b; return sum;} void main(){int x,y,z; printf("Enter x,y:");scanf("%d%d",&x,&y); z=myadd(&x,&y);//将实参x、y的地址赋给指针变量a和b printf("%d+%d=%d\n",x,y,z);}
8.4.2 移动指针 p+1:移动几个字节由指针变量所指向的数据类型决定 当指针指向一串连续的存储单元时,可对指针变量进行加 或减一个整数、或通过赋值运算,使指针移动。 p+1:指针向地址值大的方向移动一个存储单元,指针基类型 决定一个存储单元所占的字节。 p-1: 指针向地址值小的方向移动一个存储单元,指针基类型 决定一个存储单元所占的字节。 8.4.3 指针比较 在关系表达式中,可以对两个指针进行比较,即两个变量地 址的比较。如:p,q是两个指针变量,if(p<q) printf(“p points to lower than q.\n”); 通常,两个或两个以上的指针指向同一目标时比较才有意义。
例8.5(P101)以下函数把主函数中变量i和j中存放较大数的那 个地址作为函数值返回。 #include<stdio.h> int * fun(int *,int *); void main(){int *p,i,j; printf("Enter two numbers:"); scanf("%d%d",&i,&j); p=fun(&i,&j);//p将得到i或j的地址 printf("i=%d,j=%d,*p=%d\n",i,j,*p);} int *fun(int *a,int *b){//函数的返回值类型为指针类型(地址值) if(*a>*b) return a; return b;}
• 编程实现改变变量的值和改变指针指向内容的区别,将输入 的三个数,按从大到小的顺序排列。 #include<stdio.h> void main(){int *pointer1,*pointer2,*pointer3,a,b,c; void swap(int *,int *,int *); printf("please input three numbers:"); scanf("%d%d%d",&a,&b,&c); pointer1=&a,pointer2=&b,pointer3=&c; printf("(1)the sorted numbers are:a=%d,b=%d,c=%d.\n",a,b,c); swap(pointer1,pointer2,pointer3); printf("(3)the sorted numbers are:a=%d,b=%d,c=%d.\n",a,b,c); printf("(4)the sorted numbers are:*pointer1=%d,*pointer2=%d,*pointer3=%d.\n",*pointer1, *pointer2,*pointer3);}
例8.3(P100) 调用swap函数,交换主函数中变量x和y中的数 据。//指针变量作为形参时,调用时分配空间,结束后释放空间 #include<stdio.h> void swap(int *,int *); void main(){int x=30,y=20; printf("(1)x=%d y=%d\n",x,y); swap(&x,&y);//将变量x和y的地址传递给指针变量a和b printf("(4)x=%d y=%d\n",x,y);}//在被调函数中变量的值被改变, 返回到主调函数时,变量的值即是更新后的值 void swap(int *a,int *b){int t; printf("(2)a=%d b=%d\n",*a,*b); t=*a;*a=*b;*b=t;//交换变量x和y的值 printf("(3)a=%d b=%d\n",*a,*b);}
例8.1(P97) 用指针指向两个变量,通过指针运算选出值小 的那个数。 • #include<stdio.h> • void main(){ • int a,b,min,*pa,*pb,*pmin; • pa=&a;pb=&b;pmin=&min; • printf("input 2 interger numbers:"); • scanf("%d%d",pa,pb);//输入的值依次放入pa、pb所指存储 单元中 • printf("a=%d b=%d\n",a,b);//通过输出,验证a、b中的值 • *pmin=*pa;//假定a中的值最小,将其赋给min • if(*pa>*pb) *pmin=*pb;//若b中的值比a小,将其赋给min • printf("min=%d\n",min);}//输出小值
第8章 指针
本章要点: 8.1 变量的地址和指针 8.2 指针变量的定义和指针变量的基类型 8.3 给指针变量赋值 8.4 对指针变量的操作 8.5 函数之间地址值的传递
8.1 变量的地址和指针 1.变量及其地址
C编译系统会根据定义中变量的类型分配内存空间:如char 型占1个字节,short int占2个字节,int型和float型占4字节, double型占8字节,指针变量占4字节,从而确定了这个变 量的地址。变量的地址起寻找变量的作用,就像一个指针指 向了变量,所以常把变量的地址称为“指针”。 例如char a,short int b, float c; 编译系统给变量分配存储空间如 下:图8.1 变量分配的存储单元与地址