c语⾔指针赋值指针变量赋值吗,C语⾔_指针变量的赋值与运
算,很详细
指针变量的赋值
指针变量同普通变量⼀样,使⽤之前不仅要定义说明, ⽽且必须赋予具体的值。未经赋值的指针变量不能使⽤, 否则将造成系统混乱,甚⾄死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。在C语⾔中, 变量的地址是由编译系统分配的,对⽤户完全透明,⽤户不知道变量的具体地址。 C语⾔中提供了地址运算符&来表⽰变量的地址。其⼀般形式为: & 变量名; 如&a变⽰变量a的地址,&b表⽰变量b的地址。 变量本⾝必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种⽅式:
(1)指针变量初始化的⽅法 int a;
int *p=&a;
(2)赋值语句的⽅法 int a;
int *p;
p=&a;
不允许把⼀个数赋予指针变量,故下⾯的赋值是错误的: int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。
指针变量的运算
指针变量可以进⾏某些运算,但其运算的种类是有限的。 它只能进⾏赋值运算和部分算术运算及关系运算。
指针运算符
1.取地址运算符& 取地址运算符&是单⽬运算符,其结合性为⾃右⾄左,其功能是取变量的地址。
2.取内容运算符* 取内容运算符*是单⽬运算符,其结合性为⾃右⾄左,⽤来表⽰指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。需要注意的是指针运算符*和指针变量说明中的指针说明符* 不是⼀回事。在指针变量说明中,“*”是类型说明符,表⽰其后的变量是指针类型。⽽表达式中出现的“*”则是⼀个运算符⽤以表⽰指针变量所指的变量。
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
......//表⽰指针变量p取得了整型变量a的地址。本语句表⽰输出变量a的值。
赋值运算
指针变量的赋值运算有以下⼏种形式:
1:指针变量初始化赋值。
2:把⼀个变量的地址赋予指向相同数据类型的指针变量。例如:
int a,*pa;
pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/
3、把⼀个指针变量的值赋予指向相同类型变量的另⼀个指针变量。如:
int a,*pa=&a,*pb;
pb=pa; /*把a的地址赋予指针变量pb*/
由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。
4、把数组的⾸地址赋予指向数组的指针变量。
例如: int a[5],*pa;
pa=a; (数组名表⽰数组的⾸地址,故可赋予指向数组的指针变量pa)
也可写为:
pa=&a[0]; /*数组第⼀个元素的地址也是整个数组的⾸地址,
也可赋予pa*/
当然也可采取初始化赋值的⽅法:
int a[5],*pa=a;
5、把字符串的⾸地址赋予指向字符类型的指针变量。例如: char *pc;pc="c language";或⽤初始化赋值的⽅法写为: char *pc="C Language"; 这⾥应说明的是并不是把整个字符串装⼊指针变量, ⽽是把存放该字符串的字符数组的⾸地址装⼊指针变量。 在后⾯还将详细介绍。
6、把函数的⼊⼝地址赋予指向函数的指针变量。例如: int (*pf)();pf=f; /*f为函数名*/
加减算术运算
对于指向数组的指针变量,可以加上或减去⼀个整数n。设pa是指向数组a的指针变量,则pa+n,pa-n,pa++,++pa,pa--,--pa 运算都是合法的。指针变量加或减⼀个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动⼀个位置和地址加1或减1 在概念上是不同的。因为数组可以有不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表⽰指针变量指向下⼀个数据元素的⾸地址。⽽不是在原地址基础上加1。
例如:
int a[5],*pa;
pa=a; /*pa指向数组a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值为&pa[2]*/
指针变量的加减运算只能对数组指针变量进⾏, 对指向其它类型变量的指针变量作加减运算是毫⽆意义的。(3)两个指针变量之间的运算只有指向同⼀数组的两个指针变量之间才能进⾏运算, 否则运算毫⽆意义。
①两指针变量相减
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址) 相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2 是指向同⼀浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,⽽浮点数组每个元素占4个字节,所以pf1-pf2的结果为(2000H-2010H)/4=4,表⽰pf1和 pf2之间相差4个元素。两个指针变量不能进⾏加法运算。 例如,
pf1+pf2是什么意思呢?毫⽆实际意义。
②两指针变量进⾏关系运算
指向同⼀数组的两指针变量进⾏关系运算可表⽰它们所指数组元素之间的关系。例如:
pf1==pf2表⽰pf1和pf2指向同⼀数组元素
pf1>pf2表⽰pf1处于⾼地址位置
pf1
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=&a;
t=*pa**pb;
printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
printf("s=%d\nt=%d\n",s,t);
}
...... 说明pa,pb为整型指针变量
给指针变量pa赋值,pa指向变量a。
给指针变量pb赋值,pb指向变量b。
本⾏的意义是求a+b之和,(*pa就是a,*pb就是b)。
本⾏是求a*b之积。
输出结果。
输出结果。
......
指针变量还可以与0⽐较。设p为指针变量,则p==0表明p是空指针,它不指向任何变量;p!=0表⽰p不是空指针。空指针是由对指针变量赋予0值⽽得到的。例如: #define NULL 0 int *p=NULL; 对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使⽤的。否则将造成意外错误。⽽指针变量赋0值后,则可以使⽤,只是它不指向具体的变量⽽已。
main(){
int a,b,c,*pmax,*pmin;
printf("input three numbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b){
pmax=&a;
pmin=&b;}
else{
pmax=&b;
pmin=&a;}
if(c>*pmax) pmax=&c;
if(c
printf("max=%d\nmin=%d\n",*pmax,*pmin);
}
上⾯代码的意思是:
pmax,pmin为整型指针变量。
如果第⼀个数字⼤于第⼆个数字...
指针变量赋值
指针变量赋值
指针变量赋值
指针变量本身有地址吗指针变量赋值
判断并赋值
判断并赋值
输出结果
......
C语⾔中指针变量的加减运算
1.指针变量中存放的是地址值,也就是⼀个数字地址,例如某指针变量中的值是0x20000000,表⽰表⽰此指针变量存放的是内存中位于
0x20000000地⽅的内存地址.指针变量可以加减,但是只能与整型数 ...
C语⾔的指针变量
C语⾔的指针变量 在C语⾔中,变量是固定范围的存储空间,它存储的是赋给他的值, ⽐如: ; /* 这⾥是定义⼀个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对⽤户是透 ...
[错误记录_C] 还未给指针变量正确赋值的情况下,就使⽤它的值
错误的代码: 错误的结果: 错误原因分析: 在使⽤(1) 将pB,pC的值赋给pA的lchild和rchild时: 还未给指针变量pB和pC赋值,现在pB和pC中存的是个垃圾值 Note: (2)- ...
C语⾔函数指针变量和指针函数以及指针数组
C语⾔中,⼀个函数总是占⽤⼀段连续的内存区,⽽函数名就是该函数所占内存区的⾸地址.我们可以把函数的这个⾸地址(或称⼊⼝地址)赋予⼀个指针变量,使该指针变量指向该函数.然后通过指针变量就可以到并调⽤这 ...
C语⾔之指针变量
菜单导航 1.指针变量 2.指针和数组 3.常量指针和指向常量的指针 4.指针和字符串的关系 5.数组越界造成的访问不属于⾃⼰的内存空间现象6.引⽤数据类型和基本数据类型,形参和实参 7.字符串和字 ...
[⽇常] C语⾔中指针变量
CPU 访问内存时需要的是地址,⽽不是变量名和函数名!变量名和函数名只是地址的⼀种助记符,当源⽂件被编译和链接成可执⾏程序后,它们都会被替换成地址.编译和链接过程的⼀项重要任务就是到这些名称所对应的 ...
C语⾔中指针变量如何向函数中传递
指针变量存储的是地址,所以在函数调⽤的时候我们能否将指针变量传递给函数?如果不知道结果,那我们可以直接问电脑,输⼊如下⼀段代码. void GetMemory(char *p) { p = (char ...
C语⾔_指针和数组的⼏种访问形式
敲⼏⾏代码来看看⼏种访问的形式~ #include ;int main() { ] = {, , , , , }; //初始化5个元素的⼀维数组 int *p = arr ...
C语⾔使⽤指针变量指向字符串,对字符串进⾏处理后再将指针移向开头为什么不能输出?(使⽤Dev-c++进⾏编译)
# include # include int main() { char *point_1="aaaaaabbbbbbzz ...
随机推荐
安卓(android)之实现断点下载功能
⼀.建⽴实体类 1.⽂件实体类 application.dao; import java.io.Serializable; /** * 预下载⽂件实 ...
2014年全球SEO⾏业调查报告
前⾔: 1.该调查报告是MOZ每两年⼀度针对SEO⾏业的数据分析报告. 2.随着SEO的进化,该报告已不仅仅是SEO⾏业,今年的调查数据更多分析⽹络营销⾏业,可以称作"⽹络营销⾏业调查报告& ...
(转)Tomcat 7 访问 Manager 和 Host Manager
配置好 Tomcat 7.0 后,在 l 中配置⽤户⾓⾊来访问 localhost:8080 的这样三个按钮总出现问题: Server Status Manager Ap ...
【Alpha阶段】第三次scrum meeting
每⽇任务: ·1.本次会议为第三次Meeting会议: ·2.本次会议于今⽇上午08:30第五社区五号楼下召开,会议时长15min. ⼆.每个⼈的⼯作:三.⼯作中遇到的困难: 由于对编程语⾔的学习不 ...
Java8函数之旅 (⼋) - 组合式异步编程
前⾔ 随着多核处理器的出现,如何轻松⾼效的进⾏异步编程变得愈发重要,我们看看在java8之前,使⽤java语⾔完成异步编程有哪些⽅案. JAVA8之前的异步编程 继承Thead类,重写run⽅法 实现 ...
Integer 与 int
Integer是java为int提供的封装类.int的默认值为0,⽽Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则⽆法表达出未赋值的情况 例如,要想表达出没 ...
#⼯具 Intellij IDEA中⾃定义的Maven Archetype管理
背景,⼿贱在输⼊⾃定义的 archetype时后⾯多输⼊了⼀个空格 解决:⾃定义的Archetype 会保存在Windows下⾯的⽂件中
C:\Users\\.IntelliJ ...
构建⾼性能服务 Java⾼性能缓冲设计 vs Disruptor vs LinkedBlockingQueue
⼀个仅仅部署在4台服务器上的服务,每秒向Database写⼊数据超过100万⾏数据,每分钟产⽣超过1G的数据.⽽每台服务器(8核12G)上CPU 占⽤不到100%,load不超过5.这是怎么做到呢?下⾯ ...
linux添加PYTHONPATH环境变量
1.添加环境变量到pythonpath export PYTHONPATH=$PYTHONPATH:/home/myproject 查看pythonpathecho $PYTHONPATH 可以进⼊p ...
WPF教程五:布局之Canvas⾯板
Canvas:画布⾯板 画布,⽤于完全控制每个元素的精确位置.他是布局控件中最为简单的⼀种,直接将元素放到指定位置,主要来布置图⾯.使⽤Canvas,必须指定⼀个⼦元素的位置(相对于画布),否则所有元 ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论