指针和指针 变量

合集下载

《c++程序设计》第7章 指针

《c++程序设计》第7章 指针
2.指针变量的赋值
(1)取地址运算符&: 取出变量的内存首地址
(2)指针变量的赋值: 指针变量=&变量;或指针变量=指针变量;
3.指针变量的引用
指针运算符* :通过指针变量间接访问变量对应存储单元内容。
【例7.1】定义指针变量
p、p1、q,并将变量a的 地址赋给p、p1,输出a、 p、p1、*p、*p1的值。
【例7.3】指针变量的自加、自减、加n和减n运算。例程
3.指针变量的关系运算
指针变量的关系运算是指针变量值的大小比较,即 对两个指针变量内的地址进行比较,主要用于对数组元 素的判断。
【例7.4】用指针变量求一维实型数组元素和,并输出数组每个元 素的值及数组和。 例程
4.指针运算符的混合运算与优先级
指针数组
例如,指针数组的定义: int *pi[4];
表示定义了由4个整型指针元素pi[0]、pi[1]、pi[2]、pi[3]组成的整型指针数组。 char *pc[4];
表示定义了由4个字符型指针元素pc[0]、pc[1]、pc[2]、pc[3]组成的字符型指针数组。 (3)指针数组元素的引用 【例7.15】用指针数组输出字符串
3.数组元素的引用
对一维数组a[ ]而言,当p=a时: ①第i个元素地址:&a[i]= p+i=a+i。 ②第i个元素值:a[i]= *(p+i) =*(a+i)=p[i]。
一维数组的第i个元素有四种方式引用: a[i]、*(p+i) 、*(a+i)、p[i]。
用数组指针的四种方法求一维数组中的最大值的方法为: 方法一:使用*(a+i)访问a[i] 方法一:用指针变量名p代替数组名a,即用 p[i]代替a[i] 方法二:移动指针变量p++,用*p访问a[i] 方法三:使用*(p+i)访问第 i个元素a[i]

指针变量的定义与引用

指针变量的定义与引用

指针变量的初始化
在定义指针变量时同时给该变量一个初始值, 在定义指针变量时同时给该变量一个初始值,称为 指针变量初始化。 指针变量初始化。 例如: 例如: int a=20; int *pa; pa=&a;(&为取地址符) ( 为取地址符 为取地址符)
指针变量的几点说明
(1)指针变量名前的“*”表示该变量为指针变量,而指针 )指针变量名前的“ ”表示该变量为指针变量, 变量名不包含该“ ” 变量名不包含该“*”。 (2)一个指针变量只能指向同一类型的变量。 )一个指针变量只能指向同一类型的变量。 (3)指针变量中只能存放地址,而不能将数值型数据赋给 )指针变量中只能存放地址, 指针变量。 指针变量。 (4)只有当指针变量中具有确定地址后才能被引用。 )只有当指针变量中具有确定地址后才能被引用。
指针变量的引用
对指针变量的引用包含两个方面: 对指针变量的引用包含两个方面:一是对指针变量 本身的引用,如对指针变量进行各种运算; 本身的引用,如对指针变量进行各种运算;二是利用指 针变量来访问所指向的目标,对指针的间接引用。 针变量来访问所指向的目标,对指针的间接引用。 与指针相关的两个运算符: 与指针相关的两个运算符: (1)&:取地址运算符 ) 取地址运算符 (2)*:指针运算符,取其指向的内容 ) :指针运算符, 指针指向的对象可以表示成如下形式: *指针变量 指针指向的对象可以表示成如下形式: *指针变量 特别要注意的是,此处*是访问指针所指向变量的运算 特别要注意的是,此处 是访问指针所指向变量的运算 与指针定义时的*不同 在定义指针变量时, 不同。 符,与指针定义时的 不同。在定义指针变量时,* 号表 示其后是指针变量。在其它位置出现, 号是运算符。 示其后是指针变量。在其它位置出现,* 号是运算符。 如果与其联系的操作数是指针类型, 是间接访问 引用) 是间接访问(引用 如果与其联系的操作数是指针类型,*是间接访问 引用 运算符;如果与其联系的操作数是基本类型, 运算符;如果与其联系的操作数是基本类型, *是乘法运算符。在使用和阅读程序时要严格 是乘法运算符。 是乘法运算符 区分* 号的含义。 区分 号的含义。

c语言指针详细讲解

c语言指针详细讲解

c语言指针详细讲解
C 语言中指针是非常强大的概念,它允许程序直接访问内存中的数据。

指针在 C 语言中最初是被用于解决内存分配问题而提出的,随着 C 语言的发展,指针也变得愈发重要。

指针的本质是一个存储变量地址的变量。

在 C 语言中,指针通常用符号&来表示,例如&x 表示的是 x 变量的地址。

指针变量存储的是一个内存地址,当程序读取指针变量时,它会读取该地址中存储的数据。

C 语言中可以使用指针进行高效的内存操作。

例如,当程序需要对一个数组元素进行修改时,可以直接用指针修改该元素的值,而不必修改数组名本身。

另外,指针还可以用于动态分配内存,这是 C 语言中一个重要的特性。

指针的使用方法比较灵活,但也需要小心使用。

如果不小心处理指针,可能会导致未知的错误。

例如,当指针指向的内存空间被释放后,程序试图访问该内存空间时可能会导致未定义的行为。

因此,在C 语言中,指针的使用需要更加谨慎。

C 语言中指针是一个非常重要和强大的概念,掌握指针的使用方法可以让程序员写出更加高效和安全的代码。

c语言使用指针的基本原则

c语言使用指针的基本原则

c语言使用指针的基本原则
1. 指针的定义和声明:使用 * 来定义指针变量,指针的类型必须和指向的变量类型相匹配。

2. 取址操作:使用 & 运算符来获取一个变量的地址。

3. 解引用操作:使用 * 运算符来访问指针所指向的变量的值。

4. 指针的初始化:指针变量在定义时不被初始化,可以通过将其赋值为 NULL 或者一个有效
的地址来进行初始化。

5. 空指针检查:在对指针进行操作之前,应该先检查其是否为空指针,以避免出现错误。

6. 指针的指向:指针变量可以指向一个变量的地址,也可以指向另一个指针变量的地址。

7. 动态内存分配:可以使用 malloc() 函数来在运行时动态地分配内存空间,并使用 free() 函数
释放已分配的内存空间。

8. 指针运算:可以使用指针进行算术运算,比如指针加法、指针减法等。

同时,指针还可以用
于数组的访问。

9. 指针作为函数参数:可以将指针作为函数的参数传递,从而在函数内部修改指针所指向的变
量的值,实现数据的传递和共享。

10. 指针和数组:指针可以用来遍历数组,通过指针访问数组元素可以提高效率。

同时,数组
名本身也可以看作是一个指向该数组第一个元素的指针。

这些是 C 语言使用指针的一些基本原则,掌握了这些原则可以更加灵活和高效地使用指针来
进行编程。

指针互相赋值

指针互相赋值

指针互相赋值指针是C++中一种非常重要的数据类型,它可以用来表示内存中的地址。

指针的操作非常灵活,可以用来进行各种高级的内存操作。

其中,指针的赋值操作是一种很常见的操作,本文将详细介绍指针互相赋值的相关知识。

1. 什么是指针互相赋值?指针互相赋值就是将一个指针变量的值赋给另一个指针变量。

在C++中,指针变量存储的是内存地址,因此指针之间的赋值操作实际上是将一个内存地址赋给了另一个变量。

2. 指针互相赋值的语法指针互相赋值的语法非常简单,只需要用一个指针变量的值来初始化另一个指针变量即可。

例如:int *p1 = new int(10); // 创建一个指向动态分配的整数的指针int *p2 = p1; // 将p1的值赋值给p2在以上代码中,我们创建了一个指向动态分配的整数的指针p1,并将p1的值赋值给了另一个指针变量p2。

3. 指针互相赋值的影响指针互相赋值会影响指针变量指向的内存地址和内存中存储的数据。

例如,如果我们在指针变量p1上使用delete运算符,那么p2也会指向一块已经被释放的内存。

int *p1 = new int(10); // 创建一个指向动态分配的整数的指针int *p2 = p1; // 将p1的值赋值给p2delete p1; // 释放p1指向的内存cout << *p2 << endl; // p2指向的内存已经被释放,输出的结果是不确定的在以上代码中,我们首先创建了一个指向动态分配的整数的指针p1,并将p1的值赋值给了另一个指针变量p2。

然后,我们使用delete运算符释放了p1指向的内存。

此时,p2指向的内存也已经被释放,因此输出的结果是不确定的。

4. 指针赋值和深拷贝指针互相赋值也涉及到指针赋值和深拷贝的概念。

指针赋值是将一个指针变量的值赋给另一个指针变量,这两个指针变量指向的是同一块内存。

指针赋值通常用于引用数据类型中的成员变量赋值。

指针变量的值和指针变量地址

指针变量的值和指针变量地址

指针变量的值和指针变量地址// 记录⼀下学习指针时遇到的问题,如表述或理解有误,欢迎指正. 1.指针变量是⽤来存放内存地址的变量,它的值是⼀个内存地址,⽽它本⾝也保存在⼀个内存地址中. 2.当初始化⼀个指针变量时,cpu会开辟⼀块内存给这个指针变量;当给这个指针变量赋值后,这个指针会指向⼀个地址,其值为申明变量时指定类型的零值.func main() {var myInt *int //申明⼀个指针变量myIntfmt.Println(&myInt, myInt) //0xc000006028 <nil> 开辟⼀块地址给指针变量,初始化前的值为nilmyInt = new(int) //初始化myIntfmt.Println(&myInt, myInt, *myInt) //0xc000006028 0xc00000a0c8 0 初始化后myInt指向被分配的地址,值为类型的零值t := 1 //申明⼀个int类型变量fmt.Println(&t) //0xc00000a100 int类型变量的地址*myInt = t // 将t的值赋值给*myInt,此时myInt指向的地址并没有发⽣变化fmt.Println(&myInt, myInt, *myInt) //0xc000006028 0xc00000a0c8 1 myInt指向的地址没有发⽣变化,但那个地址对应的值以及被修改为1myInt = &t //将t的地址赋值给muInt,此时myInt指向的地址发⽣变化fmt.Println(&myInt, myInt, *myInt) //0xc000006028 0xc00000a100 1 myInt指向的地址已经不是初始化时cpu分配的地址,⽽是变成变量t的地址,对应的值也变成t的值} myInt = &t这种操作会修改myInt初始化时指向的地址,所以在开发时会存在下边的坑:案例:func Test(s *string) error {fmt.Println(s) //s的地址为: 0xc000046230myTest := "hello world"s = &myTestfmt.Println(s) //s的地址为: 0xc000046240return nil}func main() {var str string_ = Test(&str)fmt.Println(str)}/*上段代码中,Test函数接收⼀个指针变量类型的参数,即str变量对应的内存地址;在函数中申明了⼀个string类型的变量,当执⾏s=&myTest时,指针变量s指向的地址由&str变成了&myTest;此时*s的值为"hello world",但并未对&str做任何修改,相当于&str传进来马上就被替换掉了;&str并未做任何改变,所以最后在主函数中打印str时发现它为空*/处理:func Test(s *string) error {fmt.Println(s) //s的地址为: 0xc000088220myTest := "hello world"*s = myTestfmt.Println(s) //s的地址为: 0xc000088220return nil}func main() {var str string_ = Test(&str)fmt.Println(str) //hello world}/*当使⽤*s = myTest这种⽅式进⾏赋值时,相当于将s指向的地址对应的值修改为"hello world", 即在函数Test中地址&str对应的值被修改所以在最后打印时成功修改str*/总结: 对于*s = myTest和s = &myTest这两种操作,*s的最终值虽然都是"hello world",但是在计算机内部却是不同的: *s = myTest相当于修改s指针变量指向地址对应的值,指向的地址未发⽣变化; s = &myTest相当于修改了指针变量s指向的地址,相应的*s也发⽣了变化.。

c语言中的指针详解

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语言中实际上是以字符数组的形式表示的。

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

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

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

第七章 指针

第七章  指针
第8 章
指针
华厦职业学院
C语言程序设计
在这一章中将介绍C语言程序的指针,指针是 一内存中的地址,任何一个变量在内存中都有一个 空间,这个空间有一个地址,这个地址就是变量的 指针,通过指针可以实现对内存的直接访问。
华厦职业学院
C语言程序设计
8.1 8.2 8.3 8.4 8.5 8.6 8.7
指针概述 指针与函数参数 指针与数组 数组与函数参数 字符串与指针 指针与二维数组 动态数组
华厦职业学院
C语言程序设计
指针变量的赋值
指针变量是一个可以存储指针值的变量,在32位系 统中它占4个字节,可以把一个变量用&取地址后赋 值给这个指针变量,例如:
int a=1,*p; p=&a; 此时p存储了变量a的地址。注意变量p本身也是一个变量, 它自己也有一个存储单元,这个存储单元显然与变量a的 存储单元是不同的,变量a的存储单元存储的是变量a的值, 而变量p存储单元存储的是变量a单元的地址,如图7-3所 示。
华厦职业学院
C语言程序设计
通过指针访问变量
既然指针变量指向一个变量,因此通过指针变 量也就知道变量的位置,知道位置也就能访问到变 量,可以通过指针变量存取变量的值。
华厦职业学院
C语言程序设计
C中规定通过:
*指针变量 来访问对应变量的值,例如: • int a=1,b,*p; • p=&a; • *p=2; // 设置p指向的变量的值为2,既a=2 • b=*p; // 把p指向的变量的值赋予b,既b=2 在C语言中,系统对“*指针变量”的解释是根据指 针变量的类型计算出对应变量所占字节数,之后把指针变 量所指的连续的几个字节的二进制数据看成是与指针变量 同类型的数据并存取这一include <stdio.h> void fun(int *p,int b) { printf("fun中: p=%p *p=%d &b=%p b=%d\n",p,*p,&b,b); *p=100; b=100; } void main() { int a=1,b=2,*p; p=&a; printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); fun(p,b); printf("调用前: p=%p a=%d &b=%p b=%d\n",p,a,&b,b); }

c语言中什么是指针

c语言中什么是指针

c语言中什么是指针指针一般指向一个函数或一个变量。

在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

在计算机语言中,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。

因此,将地址形象化的称为“指针”。

意思是通过它能找到以它为地址的内存单元。

1:指针是一个地址,指向的是个类型:我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。

而指针就是一个8个字节(64系统)。

2:指针指向的是地址,地址指向的是内容:我们需要一个变量,来存储地址,这个变量的值是地址,但是我们可以通过修改变量的值,来不断的改变地址,但是,我们如果需要改变该个地址的值的话,就需要,对地址的值进行修改,而不改变地址。

int a = 10;int *p ;p = &a;*p =11;a=?这里我们看到,p 是一个变量,我们使用p来存储变量a的地址,这是,我们使用*p对于这个变量进行赋值,那么a的值最后,是多少呢,结果是11,因为我们使用*p赋值,就相当于a=11,赋值效果一样的。

3:指针的指针,是面对于指针的变量:我们说,指针的指针的时候,就有点不清楚了,到底怎么区分指针和指针的指针呢。

char *p;char **pr;pr = &p;我们这样看就清楚了一点,char *(*pr); *pr是一个存储的值为指针的变量,pr就是存储上个变量地址的变量。

整合起来就是,pr是一个存储的值为指针的地址的变量。

这样,我们就基本,对于指针有一个直接的了解了。

实验8-1 指针基本概念

实验8-1 指针基本概念

实验8-1 指针基本概念【知识点回顾】1.指针和指针变量1)内存地址:内存存储单元的编号,从0开始,以字节为单位2)指针:一个内存地址有且仅有一个内存存储单元对应,即一个地址“指向”一个单元,故将地址称为指针3)指针变量:C语言中允许将地址作为数据值,用一个变量来存放。

存放指针的变量称为指针变量。

2.指针变量使用三步骤1)声明:一般形式如:类型说明符*指针变量名;2)初始化:一般形式如:指针变量=&变量;3)访问数据:一般形式如:*指针变量3.指针运算符1)间接访问运算符“*”2)取地址运算符“&”4.printf和scanf是否使用指针对比:假定有int x,y;int *px=&x,*py=&y;1)不使用指针的输入输出语句:scanf(“%d %d”,&x,&y);printf(“%d %d”,x,y);2)使用指针的输入输出语句:scanf(“%d %d”,px,py);printf(“%d %d”,*px,*py);5.打印地址信息:1)使用%p占位符2)使用%x占位符【典型例题】1.例题1,指针的基本使用方法#include <stdio.h>int main(){int data=100;//第一种指针变量定义方式:声明与初始化分两步完成int * pd; //声明指针变量pd=&data; //初始化指针变量,注意细节,data变量必须之前声明过//下面是第二种指针变量定义方式:声明与初始化一步完成//int * pd = &data; //声明指针变量,同时初始化指针变量printf("Direct access: data = %d\n", data); //变量的直接访问printf("Indirect access: data = %d\n",*pd); //变量的间接访问printf("The address of data is %p\n", &data);//变量的地址输出printf("The address of data is %p\n",pd); //指针变量的输出return 0;}程序运行效果如下:2.例题2,两数求和。

C语言程序设计》基本知识点

C语言程序设计》基本知识点

C语言程序设计》基本知识点C语言程序设计》教学基本知识点第一章C语言基本知识1.C源程序的框架尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。

2.C语言源程序的书写规则:1)C源程序是由一个主函数和若干个其它函数组成的。

2)函数名后必须有小括号,函数体放在大括号内。

3)C程序必须用小写字母书写。

4)每句的末尾加分号。

5)可以一行多句。

6)可以一句多行。

7)可以在程序的任何位置加注释。

3.语句种类语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。

1)流程控制语句流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。

其中后两种结构要用特定的流程控制语句实现。

2)表达式语句表达式语句的形式是:表达式。

即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。

表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。

最常见的表达式语句是赋值语句。

3)函数挪用语句函数挪用语句实践上也是一种表达式语句,形式为:在一次函数挪用的小括号后面加上一个分号。

(4)空语句空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义迁移转变点利用。

5)复合语句复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。

注意复合语句中最后一个语句末尾的分号不能少。

复合语句右大括号后面没有分号。

4.运算符用来表示数据各种操作的符号称为运算符。

运算符实际上代表了一种类型数据的运算规则。

不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。

C语言程序设计教程第8章北京邮电大学出版社.

C语言程序设计教程第8章北京邮电大学出版社.

第8章 指针
18
说明: 对于不同基类型的指针,指针变量“加上” 或“减去”一个整数n所移动的字节数(= sizeof( 指针所指对象的数据类型 ) )是不同的。 例如: float a[10], *p=a, *x; x=p+3; /*实际上是p加上3*4个字节赋给x, x依然指向数组的第三个分量*/
C语言程序设计教程
第 8 章 指针
8.1 8.2 8.3 8.4 8.5 8.6 指针与指针变量 指针与函数 指针与数组 指针与字符串 指针数组与命令行参数 程序举例
第8章 指针
2
8.1 指针与指针变量
8.1.1 指针的概念
1.内存与变量地址 内存地址:内存是计算机用于存储数据的存储 器,以一个字节作为存储单元,为了便于访问,给 每个字节单元一个唯一的编号,第一字节单元编号 为0,以后各单元按顺序连续编号,这些单元编号 称为内存单元的地址 。 变量地址:变量所分配存储空间的首字节单元 地址(字节单元编号)。
2018/9/14
C语言程序设计教程
第8章 指针
3
在程序中,对变量的操作实际上是通过地址来完成的。 • 定义时:定义变量→分配内存单元(按类型)→地址 (即内存中的编号) • 存取操作:程序 →变量名 →内存单元 →存取 • 实际上: 程序 →编译 →变量名 →变量的地址
2.访问方式
直接存取:把直接按变量名或地址存取变量值的方式 称为 “直接存取”方式。
2018/9/14
C语言程序设计教程
第8章 指针
10
8.1.3 指针运算
指针运算实际上是地址的计算,包括赋值运算、算术运算、 关系运算三种。
1. 指针的赋值运算 (1)将变量地址值赋给指针变量,使指针指向该变 量。

mcgs指针变量讲解 -回复

mcgs指针变量讲解 -回复

mcgs指针变量讲解-回复MCGS指针变量讲解指针是编程中非常重要且常用的概念,它允许程序直接访问和操作内存中的数据。

在MCGS(Mitsubishi Control Graphic Software)软件中,指针变量可以用于访问和修改内存中的数据,是实现高级功能和优化代码的关键。

本文将以MCGS指针变量为主题,分步骤详细介绍指针的概念、使用方法和注意事项。

第一步:认识指针在计算机内存空间中,每个字节都有唯一的地址,指针就是存储这些地址的变量。

通过指针,我们可以访问和操作存储在指针指向的地址中的数据。

指针变量在MCGS中可以用来指向不同的数据类型,如整数、字符、浮点数等。

第二步:声明指针变量在MCGS中,声明指针变量需要使用特定的语法。

我们可以使用"P"函数来声明一个指针变量,语法如下:指针变量数据类型P(指针名);其中,指针变量数据类型可以是MCGS软件支持的任意数据类型,指针名为变量的名称,可以根据具体需求自行命名。

第三步:初始化指针变量初始化指针变量是为指针变量赋予一个初始值,它指向一个有效的内存地址。

在MCGS中,可以使用"PINIT"函数对指针变量进行初始化,语法如下:PINIT(指针名, 地址);其中,指针名为要初始化的指针变量名称,地址可以是一个具体的地址值,也可以是另一个指针变量的地址。

第四步:使用指针变量使用指针变量可以访问和修改指针指向的内存中的数据。

在MCGS中,可以使用"PGET"和"PSET"函数来分别获取和设置指针变量指向的地址中的数据。

语法如下:PGET(指针名): 获取指针指向地址中的数据值。

PSET(指针名, 数据): 设置指针指向地址中的数据值。

此外,还可以使用指针变量进行运算和比较。

例如,可以将一个指针变量加上一个整数值,然后再将结果赋给另一个指针变量。

这样可以实现指针的移动和偏移。

C语言指针

C语言指针
注意: *p若出现在“=”的右边或其他表达式中则为 取内容; *p若出现在“=”的左边为存内容。
#include <stdio.h>
void main()
{ int a=5,b=3;
int *p;
10
p=&a;
4,4
b=*p+5;
printf(“%d\n”,b);
*p=4;
printf(“%d,%d”,a,*p);
}
三、数组的指针与函数实参
例:编写一函数求一维数组的最大元素及其下 标位置(要求使用指针) 已知:数组首地址p,元素个数n;(作函数参 数) 结果:下标k;(作返回值) int max_array(int *p,int n) 设最大值放在max中,则初始状态为:
max=*p, k=0 如果*(p+i)>max 则max=*(p+i)且k=i
a[i] &a[i][0] *(a+i)
数组元素地址
a+i &a[i]
不要把&a[i]理解为a[i]单元的物理地址,因为 a[i]不是一个变量, &a[i] 和a[i]的值是相等的。但 含意不一样。前者指向行,后者指向列; &a[i]:第i行的首地址 a[i]:第i行0列地址 &a[i]+1:第i+1行的首地址 a[i]+1:第i行1列的地址
指针变量作函数参数
例:编写一个函数实现两个数的交换。
#include<stdio.h>
#include<stdio.h>
void swap(int x,int y) void swap(int *x,int *y)

C语言指针变量

C语言指针变量

C语言指针变量变量的指针就是变量的地址。

存放变量地址的变量是指针变量。

即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。

因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。

为了表示指针变量和它所指向的变量之间的关系,在程序中用“*”符号表示“指向”,例如,i_pointer代表指针变量,而*i_pointer 是i_pointer所指向的变量。

因此,下面两个语句作用相同:1.i=3;2.*i_pointer=3;第2个语句的含义是将3赋给指针变量i_pointer所指向的变量。

定义一个指针变量对指针变量的定义包括三个内容:1.指针类型说明,即定义变量为一个指针变量;2.指针变量名;3.变量值(指针)所指向的变量的数据类型。

其一般形式为:类型说明符*变量名;其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。

例如:1.int *p1;表示p1是一个指针变量,它的值是某个整型变量的地址。

或者说p1指向一个整型变量。

至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。

再如:1.int *p2; /*p2是指向整型变量的指针变量*/2.float *p3; /*p3是指向浮点变量的指针变量*/3.char *p4; /*p4是指向字符变量的指针变量*/应该注意的是,一个指针变量只能指向同类型的变量,如P3 只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。

指针变量的引用指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。

未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。

指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。

在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。

两个有关的运算符:∙&:取地址运算符;∙*:指针运算符(或称“间接访问” 运算符)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
int fmin(int *p, int n) { int i,m;
m=*p; for(i=0;i<n;i++) if (m>*(p+i))
m=*(p+i); return(m);} main( ) { int a[10],min,i; for(i=0;i<n;i++) scanf(“%d”,&a[i]); min=fmin(a,10); printf(“min=%d”,min); }
上一页 下一页 返回
9.2 指针变量的定义与应用
(2) 指针的赋值与比较 例9.1 main( ) { int a,b; int *p1,*p2; a=10;b=20; p1=&a;p2=&b; printf(“%d %d\n”,*p1,*p2); p1=p2; *p2=5; printf (“%d %d\n”,*p1,*p2); }
上一页 下一页 返回
9.2 指针变量的定义与应用
(3) 指针的算术运算
1)指针可以与整型数相加减
若指针变量p当前指向2000单元,其基类型是整型,则以下操 作是合法的。
p=p+1
/* p指向2002单元 */
p=p+2;
/* p指向2006单元 */
p=p-1;
/* p指向2004单元 */
2)指针的减法运算
第9章指 针
9.1 指针和指针变量的概念 9.2 指针变量的定义与应用 9.3 数组的指针和指向数组的指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 返回指针值的函数 9.6 指针数组与主函数main( )的形参 9.7 函数的指针和指向函数的指针变量
9.1 指针和指针变量的概念
为了形象地描述内存单元的数据在存取过程中单元地址的变 化情况,引入了指针这一概念。其实,指针就是地址。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
该程序在进行函数调用时,将实参a的值(即数组的起始地址) 传给形参p,指针p获得了数组的起始地址,通过指针的移动求出 数组中元素的最小值。如图9-10所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
方法2:实参和形参均为指向数组元素基类型的指针变量。 int fmin(int *p,int n) { int i,m;
9.2.1 指针变量的定义与相关运算
1.指针变量的定义 指针变量的定义其实就是把存放地址的变量定义成“指针类
型”。一般格式为: 类型名 *指针变量名;
2.指针变量的相关运算 (1) 指针运算符 有两个相关的运算符: &:取地址运算符。 *:指针运算符(或称“间接访问”运算符)。
下一页 返回
9.2 指针变量的定义与应用
1)可用运算符&求变量的地址 用赋值语句使指针变量指向变量,例如: p1=&i; (表示将变量i的地址赋给指针变量) p2=&j; (表示将变量j的地址赋给指针变量) 则p1、p2分别指向了变量i、j。如图9-2所示。 2)可用运算符“*”引用指针变量
“*”运算符用于某个地址(如指针变量)之前,表示取*后地 址中的内容。
两个相同基类型的指针变量可以进行减法运算。设p1、p2均 为指向整型变量的指针变量,且p1=2000,p2=2006,则p2-p1=3。 3其实是(2006-2000)/2得到的结果,表示两个指针所指对象之间
指针基类型的元素个数。系统会根据类型自动地进行地址运算, 并不是两个地址的直接相减。
上一页 下一页 返回
int a[10],*p=a;或 int a[10],*p=&a(0); 只要移动指针p,就可访问数组a的任一元素。如图9-8所示。
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.3数组名作为函数的参数
数组名可以作为函数的形参或实参。如果要将一个一维数组 的首地址传给函数,实参可以是数组名或存放有数组首地址的指 针变量。而形参可以为一个一维数组或基类型为数组元素的指针 变量。 例9.6 编一个函数,求数组a中n个整数的最小值。 方法1:形参为数组名,实参为指针。
上一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.1概述
C语言中数组与指针有着密切的联系,在编程时完全可以用指 针代替下标引用数组及数组元素,且使数组的引用更为灵活、有 效。当一个数组被定义后,程序会按照其类型和长度在内存中为 数组分配一块连续的存储单元。此时,数组名成为符号常量,其 值为数组在内存中所占用单元的首地址,也就是说数组名代表数 组的首地址。指针是用来存放地址的变量,当某个指针存放数组 名或数组中第一个元素的地址时,可以说该指针指向了这个数组, 这样我们可以通过指针间接访问数组中的元素。
下一页 返回
9.3 数组的指针和指向数组的指针变量
9.3.2通过指针引用数组元素
通过指针引用数组元素,必须要定义指向数组的指针,例如: int a[10]; int *p; p=a; 以上语句定义了一个长度为10的一维整型数组,同时还定义
了一个指针变量p,其基类型必须和所指向的数组类型相同,数组 名a代表数组的首地址。由于数组的首地址就是数组元素a[0]的地 址,故语句p=a;还可以是p=&a[0]; ,从而使p指向数组a的第0个元 素。变量在定义的同时可以赋初值,上面三个语句还可以等价写 成:
一般地,如果在程序中定义了一个变量,则编译时系统会根 据变量的类型给变量分配一定长度的字节数。实际上,内存中每 个字节都有一个编码,这个编码就是该字节的地址。假设程序已 定义了二个整型变量i、j;二个实型变量a、b;二个字符型变量c1、 c2,编译分配如图9-1所示
返回
9.2 指针变量的定义与应用
9.2 指针变量的定义与应用9.2.2Fra bibliotek针变量作函数参数
函数的参数是一般变量或常数时,函数实参向形参是单向值 传递。函数的参数是数组名时,则将实参数组名传递给形参数组 名,数组名表示数组中第一个元素的地址,故这种传递是地址传 递。函数参数还可以是指针变量,其作用是将变量的地址传到另 一函数中去。下面用指针变量作为函数参数来实现两个整数按由 大到小的顺序输出。
相关文档
最新文档