指针变量的赋值
指针变量和普通变量一样,不仅要在使用前定义说明,而且要给出具体的值。 无法使用未分配的指针变量。 如果不使用,系统会混乱或死机。 指针变量的代入只能赋予地址,不能赋予其他数据。 否则,会发生错误。 在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 .取内容运算符*取内容运算符*是单眼运算符,结合性从右到左,表示指针变量所指的变量。 *运算符后的变量必须是指针变量。 请注意,指针运算符*和指针变量说明中的指针描述符*不同。 在指针变量的说明中,“*”是类型说明符,表示后面的变量是指针类型。 表达式中的“*”是表示指针变量所指变量的运算符。
主()。
int a=5,*p=a;
printf('%d ',*p );
}
.//指示指针变量p已获取整数变量a的地址。 此语句表示输出变量a的值。
赋值运算
指针变量的赋值运算有以下形式。
1 :指针变量的初始化赋值。
2 )对指向同一数据类型的指针变量赋予1个变量的地址。 例如:
int a,*pa;
pa=a; /*整数类型指针变量pa*/
3、向指向同一类型变量的另一个指针变量赋予一个指针变量的值。 例如:
int a,*pa=a,*pb;
pb=pa; /*指针变量pb*/
pa、pb都是整数变量的指针变量,因此可以相互赋值。
4、将数组的起始地址赋予数组的指针变量。
例如int a[5]、*pa;
pa=a; (数组名表示数组的开头地址,所以可以给出数组的指针变量pa )
也可以写如下
pa=a[0]; /*数组中第一个元素的地址也是整个数组的第一个地址。
pa*/
当然,也有初始化赋值的方法。
int a[5],*pa=a;
5 .将字符串的起始地址赋予字符类型的指针变量。 例如,char *pc; 电脑=' c语言'; 或初始化赋值的方法,使用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。
例如:
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;
pb=&b;
s=*pa+*pb;
t=*pa**pb;
printf("a=%dnb=%dna+b=%dna*b=%dn",a,b,a+b,a*b);
printf("s=%dnt=%dn",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=%dnmin=%dn",*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.文件实体类 package com.example.zjw.myapplication.dao; import java.io.Serializable; /** * 预下载文件实 ...
2014年全球SEO行业调查报告
前言: 1.该调查报告是MOZ每两年一度针对SEO行业的数据分析报告. 2.随着SEO的进化,该报告已不仅仅是SEO行业,今年的调查数据更多分析网络营销行业,可以称作"网络营销行业调查报告& ...
(转)Tomcat 7 访问 Manager 和 Host Manager
配置好 Tomcat 7.0 后,在 tomcat-users.xml 中配置用户角色来访问 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,必须指定一个子元素的位置(相对于画布),否则所有元 ...