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;

pb=&b;

s=*pa+*pb;

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值后,则可以使用,只是它不指向具体的变量而已。

fff6c98081bf8904098fb5e1bd59ff4b.gif

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);

}

fff6c98081bf8904098fb5e1bd59ff4b.gif

上面代码的意思是:

pmax,pmin为整型指针变量。

输入提示。

输入三个数字。

如果第一个数字大于第二个数字...

指针变量赋值

指针变量赋值

指针变量赋值

指针变量赋值

判断并赋值

判断并赋值

输出结果

......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ospf工作原理_OSPF动态路由配置经典案例

前导知识点:静态路由结合上一讲讲解的距离矢量路由协议,本讲我们讲解链路状态路由协议----OSPF,相比较于RIP,OSPF能够支持大型网络,下面列出RIP和OSPF的对比图,进一步说明了OSPF的强大。RIP最多支持15台路由…

gridview ashx实现数据更新_Python分析了香港26281套在售二手房数据,结果发现

作者:J哥背景香港的贫富差距问题一直十分尖锐,最突出的体现就是收入和楼价的巨大差异。早在60年代末香港房价就经历了暴涨,人们早已对不动产的金融属性了如指掌,全港的投资情绪一直都相当火热。即便香港当前失业率高企&#xff0c…

线性单链表存储结构c语言代码,单链表定义-(线性表的链表存储结构)

线性表分为:顺序存储结构和连存储结构顺序存储结构的优点:1.空间利用率高,几乎不需要额外的空间开销.2.数据的逻辑结构和物理结构完全一致.3.结点地址计算的时间和线性表的规模大小无关.4.可以用一维数组实现存储.但是有两个致命的缺点:1.顺序存储结构的存储空间是静态分配,必须…

idea 自动生成mybaits_怎么让idea自动创建mybatis配置文件

已采纳一、在pom.xml中添加plugin其中generatorConfig.xml的位置&#xff0c;大家根据实际情况自行调整二、generatorConfig.xml配置文件1 <?xml version"1.0" encoding"UTF-8"?>2 /p>3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Co…

奇奇seo优化软件_西藏seo关键词优化软件

西藏seoxaa0c1关键词优化软件&#xff0c;网站在建立时搜索引擎是较为完善的基本上是不太需要长期进行优化的&#xff0c;但是近几年搜索引擎优化的频率开始增加&#xff0c;这让人有些好奇&#xff0c;搜索引擎优化的目的是什么&#xff1f;为什么受企业欢迎呢&#xff1f;网站…

c语言出现源文件未编译,dev运行C语言出问题

dev运行时出现源文件未编译的情况是什么原因&#xff0c;应该怎么样解决呢#include int main(){int day,month,year,sum,leap;printf("\n请输入年、月、日&#xff0c;格式为&#xff1a;年,月,日(2015,12,10)\n");scanf("%d,%d,%d",&year,&month,…

学习理发去哪里_学习美发去哪里学

于是你会发现&#xff0c;和师傅学的这条路走不通&#xff0c;只是学了些二把刀的技术&#xff0c;混混小店还行&#xff0c;大店那更是遥不可及的事情。这次你终于下定决心&#xff0c;准备到学校去学学看&#xff0c;可是真正要学的时候你才发现&#xff0c;选择学校比去美发…

lucene自动补全_使用自动机的Lucene新的邻近查询

lucene自动补全最简单的Apache Lucene查询TermQuery匹配包含指定术语的任何文档&#xff0c;无论该术语出现在每个文档中的何处 。 使用BooleanQuery可以将多个TermQuery组合在一起&#xff0c;并完全控制哪些术语是可选的&#xff08; SHOULD &#xff09;和哪些是必需的&…

npm install 报错 汇总_2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总...

原标题&#xff1a;2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总昨天晚上安徽省2020年特岗教师招聘空缺计划征集志愿拟参加面试人员名单已经公布啦&#xff0c;接下来陆续就是资格复审和面试啦小可爱们一点要关注各地复审时间啊2020年特岗教师招聘征集志愿人员资格复…

用c语言计算sin x 的值,用泰勒公式求sin(x)的近似值

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #define PI 3.1415927double FACT(double x);double fact(int n);int main(){int n,i,k,flag;double x,sin,temp,index;while(scanf("%lf%d",&x,&n)!EOF){FACT(x);flag1; index0.1; tempx; si…

pb 调用虹软_python调用虹软2.0

1 from ctypes import *2 #人脸框3 class MRECT(Structure):4 _fields_[(uleft1,c_int32),(utop1,c_int32),(uright1,c_int32),(ubottom1,c_int32)]5 #版本信息 版本号,构建日期,版权说明6 class ASF_VERSION(Structure):7 _fields_[(Version,c_char_p),(BuildDate,c_char_p),(…

使用Java和JSF构建一个简单的CRUD应用

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 JavaServer Faces&#xff08;JSF&#xff09;是用于构建Web应用程序的Java框架&#xff0c;其中心是作为用户界面构建…

ftp 传输速度_ftp上传工具下载,8款优秀的ftp上传工具下载软件

FTP上传工具现在有很多种&#xff0c;而且各有各的特点&#xff0c;至于FTP上传工具哪个好用呢&#xff1f;小编认为萝卜白菜各有所爱&#xff0c;看个人喜好&#xff0c;还结合服务器和各种功能方面的需求。小编用的就是iis7服务器管理工具&#xff0c;比较方便而且功能不错&a…

c语言实践教程实验题答案,C语言课后实验教程习题答案

第5章以后的答案第五章答案-1-1. 【答案】&#xff1a; (1) m1 n2 (2) m2 n3 (3) a>0 并且a2. 【答案】&#xff1a;(2)for (i0;i<10;i) {……} 3. 【答案】&#xff1a;32 4. 【答案】&#xff1a; main() {char x ;int y;printf("please input :");scanf(&qu…

t分布 u分布 卡方分布_中心极限定理|z分布|t分布|卡方分布

生物统计学抽样分布&#xff1a;n个样本会得到n个统计量&#xff0c;将这n个统计量作为总体&#xff0c;该总体的分布即是抽样分布根据辛钦大数定律&#xff0c;从一个非正态分布的总体中抽取的含量主n的样本&#xff0c;当n充分大时&#xff0c;样本平均数渐近服从正态分布。因…

java ee打印功能_Java EE:异步构造和功能

java ee打印功能介绍 Java EE具有许多API和构造以支持异步执行。 从可伸缩性和性能的角度来看&#xff0c;这是至关重要的。 让我们假设2个模块相互交互。 当模块A &#xff08;发送方&#xff09;以同步方式向模块B &#xff08;接收方&#xff09;发送消息时&#xff0c;通信…

驱动备份工具哪个好_大庆seo排名优化推广公司工具哪个好

工具哪个好g81915seo排名优化推广公司大庆,网站成立时&#xff0c;搜索引擎比较完善&#xff0c;基本上不需要长期优化。然而&#xff0c;近年来&#xff0c;搜索引擎优化的频率开始增加&#xff0c;这让人们有点好奇。搜索引擎优化的目的是什么&#xff1f;为什么会受到企业的…

c语言动画原理,动画详解十大经典排序算法(C语言版)

排序算法是程序员必备的基础知识&#xff0c;弄明白它们的原理和实现很有必要。本文中将通过非常细节的动画展示出算法的原理&#xff0c;配合代码更容易理解。概述由于待排序的元素数量不同&#xff0c;使得排序过程中涉及的存储器不同&#xff0c;可将排序方法分为两类&#…

rust如何改睡袋_腐蚀rust怎么做睡袋 | 手游网游页游攻略大全

发布时间&#xff1a;2016-05-07腐蚀是一款FPS僵尸类生存游戏,这款游戏中玩家可以体验到非常自由的游戏方式,玩家需要寻找生存的资源,同时也需要及时预防僵尸和其他不怀还以的玩家的入侵,下面是新手全面攻略分享. 新手全面攻略玩法详解 [Rust游戏介绍] ...标签&#xff1a;游戏…

测量时间:从Java到内核再到

问题陈述 当您深入研究时&#xff0c;即使是最基本的问题也会变得很有趣。 今天&#xff0c;我想深入研究一下Java时间。 我们将从Java API的最基础知识开始&#xff0c;然后逐步降低堆栈&#xff1a;通过OpenJDK源代码glibc一直到Linux内核。 我们将研究各种环境下的性能开销&…