当前位置: 首页 > news >正文

【时时三省】(C语言基础)怎样定义指针变量

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

定义指针变量的一般形式为

类型名*指针变量名;

如:

int * pointer _ l , * pointer _ 2 ;

左端的int是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。

例如,上面定义的、基类型为int的指针变量pointer _ 1和pointer _ 2,可以用来指向整型的变量i和j,但不能指向浮点型变量a和b。

说明:数据类型(如int,char,float等),既然有这些类型的变量,就可以有指向这些类型变量的指针,因此,指针变量是基本数据类型派生出来的类型,它不能离开基本类型而独立存在。

下面都是合法的定义:

float * pointer _ 3;

char * pointer _ 4;

可以在定义指针变量时,同时对它初始化,如:

int *pointer _ 1 = & a , *pointer 2 = &b ;

说明:在定义指针变量时要注意:

( 1 )指针变量前面的“*”表示该变量为指针型变量。指针变量名是pointer _ l和pointer _ 2,而不是* pointer _ 1和*pointer _ 2。

( 2 )在定义指针变量时必须指定基类型。有的人认为既然指针变量是存放地址的,那么只须指定其为“指针型变量”即可,为什么还要指定基类型呢?要知道不同类型的数据在内存中所占的字节数和存放方式是不同的。指向一个整形变量和指向一个实型变量,其物理上的含义是不同的。

指向一个整型变量和指向一个实型变量,其物理上的含义是不同的。

从另一角度分析,指针变量是用来存放地址的,C的地址信息包括存储单元的位置(内存编号)和类型信息。指针变量的属性应与之匹配。例如:

int a , * p ;

p = & a ;

& a不仅包含变量a的位置(如编号为2000的存储单元),还包括“存储的数据是整型”的信息。现在定义指针变量p的基类型为int,即它所指向的只能是整型数据。这时p能接受& a的信息。

如果改为

float * p;

p = & a ;

& a是“整型变量a的地址”。

在用Vicual C++ 6.0编译时就会出现一个警告( warning ):“把一个int*型数据转换为float *数据”。在赋值时,系统会把& a的基类型自动改换为float型,然后赋给p。但是p不能用这个地址指向整型变量。从以上可以知道指针或地址是包含有类型信息的。应该使赋值号两侧的类型一致,以避免出现意外结果。

指针的移动和指针的运算(加、减)

例如“使指针移动1个位置”或“使指针值加1”,这个1代表什么呢?如果指针是指向一个整型变量的,那么“使指针移动1个位置”意味着移动4个字节,“使指针加1”意味着使地址值加4个字节。如果指针是指向一个字符变量的,则增加的不是4而是1。因此必须指定指针变量所指向的变量的类型,即基类型。一个指针变量只能指向同一个类型的变量,不能忽而指向一个整型变量。忽而指向一个实型变量。在前面定义的pointer _ 1和pointer _ 2只能指向整型数据。一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址(如编号为2000的字节),一是它指向的存储单元的数据类型(如int,char,float等)。在说明变量类型时不能一般地说“a是一个指针变量”,而应完整地说:“a是指向整形数据的指针变量,b是指向单精度型数据的指针变量,c是指向字符型数据的指针变量”

( 3 )如何表示指针类型。指向整型数据的指针类型表示为“int*”,读作“指向int的指针”或简称“int指针”。可以有int*,char *,float *等指针类型,如上面定义的指针变量pointer_3的类型是“float *”,pointer_4的类型是“char*”。int*,float*,char*是3种不同的类型,不能混淆。

( 4 )指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。如:

* pointer _ 1 = 100;/ / pointer _ 1是指针变量,100是整数,不合法

原意是想将地址100赋给指针变量pointer_1,但是系统无法辨别它是地址,从形式上看100是整常数,而整常数只能赋给整型变量,而不能赋给指针变量,判为非法。在程序中是不能用一个数值代表地址的,地址只能用地址符“&”得到并赋给一个指针变量,如“p = &a ;”。

 

 

相关文章:

  • 无人驾驶汽车运动控制分为纵向控制和横向控制
  • 软件更新 | 从数据到模型,全面升级!TSMaster新版助力汽车研发新突破
  • AIGC工具平台-FishSpeech零样本语音合成
  • 用 GitHub Issues 做任务管理和任务 List,简单好用!
  • 《Redis高并发优化策略与规范清单:从开发到运维的全流程指南》
  • 关于变换矩阵的计算
  • 同源数据互补修复机制:从DNA修复到分布式系统的可靠性设计
  • fiddler+安卓模拟器,解决无网络、抓不到https问题
  • 【Linux网络编程】序列化与反序列化
  • 组件化设计核心:接口与实现分离(C++)
  • JAVA学习-练习试用Java实现“TensorFlow/Deeplearning4j:利用DL4J构建卷积神经网络进行图像分类”
  • ios签名错误的解决办法
  • 百胜软件胜券AI:打造智慧零售运营新范式
  • 布瑞琳BRANEW:高端洗护领航者,铸就品质生活新典范
  • TestCafe 全解析:免费开源的 E2E 测试解决方案实战指南
  • 【C#】C#异步编程:异步延时 vs 阻塞延时深度对比
  • wsl2 用桥接方式连网
  • 错误: 程序包androidx.fragment.app不存在 import android
  • Linux切换中文输入法
  • 商品中心—11.商品B端搜索系统的实现文档二
  • 路由器做服务器做网站/最近三天的新闻大事简短
  • 织梦绿色企业网站模板/wordpress建站公司
  • 微信小程序开发介绍/seo网站优化推荐
  • 网站收费板块怎么做/怎么让百度收录
  • 哪里有做枪网站的/免费seo培训
  • 基于jsp的电商网站开发/网站查询站长工具