该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

int a=10;

以上一句话对变量a进行了声明,定义以及初始化

extern int a;

以上一句话仅仅对变量a进行了声明,将a的链接属性设置为external

int *p;

以上定义了一个指针

int a=10;

int *p;

p=&a;

以上为指针变量进行了赋值

说明:

首先*操作符被称为“间接访问操作符”也叫“解引用操作符”,他的作用很简单,就是对它的右操作数进行解引用,这么说吧,间接访问操作符的右操作数是一个地址,不过这里的地址只是相当于一个字符串,并没有真正的在计算机内存中标识一个位置,只有对这个操作数进行解引用,才能真正定位到计算机的内存中相应的地址上;接下来是&操作符,这个被称作“取地址操作符”,首先要明确,指针变量中存储的不是一个具体的数值,他存储的是一个地址“字符串”,p=&a,是将a的地址放入到p这个指针变量中,补充一句,在C语言中指针变量一般占有4个字节的内存

int *p=12;

以上表达式是错误的,千万不要在实际编程中进行使用,可能有些编译器不会报错,但不代表所有编译器不报错,但即使不报错也不要这么使用

说明:

首先该表达式给绝大多数初学者的印象是给指针p所指向的内存位置赋上值12,但是我们要注意了这里仅仅是对指针变量进行了声明以及定义,也就是说编译器仅仅在内存中替指针变量p分配了4个字节的内存,而并没有位指针变量p所指向的位置分配内存,也就是说int *p=12这个表达式的意义是未明确的,因为12这个值得具体存放位置编译器并不知道,笔者检测过,在MinGW(gcc在windows下的移植工具集)中,这样写仅仅是报“警告”,但这样写是错误的,所以绝对不要这么写

int a=12;

int (int *)1000=&a;

以上是为常量指针进行初始化,但是在C编程中我们可以说是绝无可能遇到这种情况,因为C语言中内存的分配并不是固定的

int a=100;

int *p=&a;

*++p;

看到以上表达式很多初学者就要困惑了,因为前缀自增操作符的优先级要高于间接访问操作符的优先级,那对于*++p;这个表达式而言是不是就应该后执行间接访问操作符呢?这里笔者纠正一下,如果是两个操作符同时具有相应的操作数,那么就遵循操作符的优先级来进行运算,但是这里的*++p;这样的表达式,我们看到只有一个操作数,而间接访问操作符和前缀自增操作符都是自右右左的结合性,所以这里先执行自增操作,也就是将指针变量p所存储的地址加1,之后再进行解引用,定位到具体的内存中,这里假设自增前p的地址是201,那么自增后再解引用,就会定位到202这个内存上

int a=100;

int *p=&a;

*p++;

看了上面的解说后,一般的初学者看了*p++;这样的表达式,大概会兴奋的说,这里必然是后缀自增先执行,哈哈哈,笔者在这里要大笑三声然后自罚三杯,因为笔者以上并没有说清自增的特性,现在这里说说后缀自增吧,在*p++;中后缀自增操作符会优先产生p的一个副本,然后解引用操作符会作用到这个副本上并返回值,这之后自增运算符才会在原有的p上执行加1的操作;我们再来说一说*++p;这个表达式,首先前缀自增会优先在p上执行加1的操作,然后产生一个p的副本,最后解引用操作符会对增1过后的副本进行解引用,从而得到相应位置的值

c语言 变量 定义 使用,C语言为什么要规定对所用到的变量要“先定义,后使用”...相关推荐

  1. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  2. C语言变量d的定义法则,C语言变量命名规则(3页)-原创力文档

    1.严格采用阶梯层次组织程序代码: 各层次缩进的分格采用 VC的缺省风格,即每层次缩进为4格,括号位于下一行. 要求 相匹配的大括号在同一列,对继行则要求再缩进4格.例如: 2.提示信息字符串的位置 ...

  3. 汇编语言定义变量c,汇编c语言变量

    广告 Apple iPad,AirPods Pro,Bose耳机,机械键盘,健身环等着您 由于c ++支持重载,因此可以使用相同的函数名称但不同的参数类型定义函数. 在编译期间,编译器根据函数的参数类 ...

  4. python怎么定义一个变量自增_Python语言中的自增运算

    本文主要向大家介绍了Python语言中的自增运算,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 接触过其他语言的同学可能都知道算数运算符里面有个自增运算符++, 在写循环的时候非 ...

  5. c语言的指针和java_C语言指针变量的定义和使用(精华)

    数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量. 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量.指针变量的值就是某份数据的地址,这样的一份数据可以是 ...

  6. C语言定义外部文件可使用的结构体和结构体变量

    如果想在a.c中定义一个可以在b.c中可以使用的结构体变量,则可以参照一下方法: 首先在a.h中定义结构体和声明结构体变量,如: typedef struct struct_a { //结构体内容 } ...

  7. c语言变量声明举例,C语言变量的定义和声明

    今天犯了一个低级的错误,在头文件中定义了一个变量,而该头文件被多个源文件调用,导致该变量重复定义.然后我就把改变量改成static类型的了,这下编译倒是不出错了,就是结果跟我想象的不一样,在一个文件中 ...

  8. c语言中结构体变量的作用,C语言 结构体 类型变量的 定义 和 引用

    前面学习了变量和数组这些简单的数据结构,它们的特点是必须使用规定的数据类型.例如数组被定义为整型后,它的所有存储单元都是由整型构成.现实生活中某一类事物的共同属性可能是由不同的数据类型组成的集合,或者 ...

  9. C语言实现易语言变量框,c语言实现简单的易语言

    大家熟知的易语言底层其实就是c语言来实现的,c语言的32个关键字加上一些常用的其他,使用#define这种宏定义来实现简单的汉语替换 1.下面就先打开VisualStudio,在头文件目录下新建一个 ...

  10. c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...

    <数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt>由会员分享,可在线阅读,更多相关<数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt(32页珍藏版)> ...

最新文章

  1. php 字符串数组转数组对象_php怎么将数组转成对象?
  2. 驭下术:如何让下属老实听话?用这3招,让你不怒自威
  3. luogu P1199 【三国游戏】
  4. java注解编程_Java注解编程原理
  5. python中集合变量_详解python的变量缓存机制
  6. Model 3车主对FSD套件不满意 德国法院下令特斯拉回购汽车
  7. [Web开发] 如何改变IE滚动条的颜色
  8. mysql 语句 简书_MySQL基本语句
  9. UVA 1637 Double Patience
  10. 2018年最新桌面CPU性能排行天梯图(含至强处理器)
  11. 离心泵CAE_2_ICEM剖分网格_2_叶轮流道
  12. php mongodb lookup,mongodb-在$lookup管道中使用$match$进行聚合
  13. 浅淡 Apache Kylin 与 ClickHouse 的对比
  14. Android打字机动画,Android 打字机效果
  15. 关于将数据写入文件的两个函数fwrite()与fprintf()的大不同 —————— 开开开山怪
  16. 千兆以太网PHY芯片调试-88E1111(RGMII接口-数据收发ECHO测试) Verilog实现python测试
  17. 用计算机软件绘制思维导图和手绘思维导图,用计算机软件绘制思维导图和手绘思维导图各有优势。()...
  18. ftp上传工具 免安装,ftp上传工具 免安装绿色破解版好用推荐
  19. Linux安装搜狗输入法-openSUSE
  20. 有秒计时的数字时钟(10分)

热门文章

  1. Dx11DemoBase 基类(二) 初始化 DirectX11 的 4个基本步骤
  2. 大话设计模式—建造者模式
  3. 【robot framework日志】更改log地址(简)
  4. 配置静态路由进阶实验
  5. JavaScript对数组的处理(一)
  6. [Apache Tomcat]server.xml文件详解
  7. 华三交换机VLAN 篇
  8. base64文件上传后台处理
  9. 通达OA 新旧两种数据库连接方式
  10. PKU A Simple Problem with Integers 3468