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

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语言中变量定义的位置(C89和C99的区别)

    C语言中变量定义的位置(C89和C99的区别) 在C++和JAVA中,按照语法,我们可以把变量定义在任何位置,所以很多人习惯了"哪里使用哪里定义"的这种做法,所以当用C语言进行编程 ...

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

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

  3. c语言 枚举定义变量,C语言之枚举的定义以及测试

    #include /*   定义方法1:只定义枚举类型,不定义变量 enum week { SUN,        // SUN = 0 MON,        // MON = 1; TUE, WE ...

  4. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...

    [摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...

  5. c语言宏定义_掌握C语言,中文编程不是梦

    文/Edward 前面我们在讲节程序编译的时候,编译器做的第一步就是预处理.C语言的预处理,其实是编译器在对整个工程编译之前做的一些文本性质的工作,例如我们经常使用的#include,这就是一个典型的 ...

  6. java语言中的标识符_Java语言基本语法(一)————关键字标识符(Java语言标识符命名规范Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )...

    一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...

  7. @value 静态变量_C语言基本知识:变量

    变量其实只不过是程序可操作的存储区的名称.C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和下划线字符组 ...

  8. 宏定义不是c语言语句 行末不必加分号,模拟C语言试题-02(2).doc

    精通教育集团-软件学院专业课集训营资料 PAGE PAGE 1 2016年天津市大学软件学院高职升本专业课模拟试题-02 考场号 考生号 姓名 第一部分 C语言部分 100分 一.单项选择题(共25小 ...

  9. c语言26字母顺序表秘文编辑,**《 C语言程序设计(第2版)》 读书笔记**

    < C语言程序设计(第2版)> 读书笔记 ---Brian W.Kernighan 等著 徐宝文 李志 译 程序设计论著笔记 1. 在C语言中,所有的变量必须先声明,后使用.声明通常放在函 ...

  10. 88是python语言的整数类型_少儿Python编程_第三讲:常量变量和数据类型

    无论使用哪一种编程语言,甚至是学习数学.物理,都需要掌握常量.变量.表达式的概念和用法.本讲将带领读者进入编程世界,学习程序的基本元素. 3.1 基本数据类型 基本数据类型有数值型.布尔型和字符型.它 ...

最新文章

  1. linux centos grub grub2 加密、清除
  2. pr文字转语音有插件吗_文字转语音软件深度解析
  3. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  4. 像亲和数一样亲密无间(洛谷P1851题解,Java语言描述)
  5. 关于MFC下使用MTL库编译错误的问题
  6. 冬日暖阳,侯捷畅谈技术人生与读书感悟
  7. 3年后,基于mysql控制vsftp的用户认证机制
  8. cygwin安装之后,可以复制到其他机器使用
  9. 大型网站技术架构(五)--网站高可用架构
  10. 【网易互娱模拟笔试】解题记录
  11. 装完nvme固态经常蓝屏_NVMe固态硬盘安装Win7蓝屏0x0000007B快速解决方法
  12. CHD搭建的环境中,解决用户权限的问题
  13. C语言 递归实现指数函数
  14. uni-app 学习: 页面高度设置100%
  15. 苹果手机2019年什么时候出新款_[创立24周年]因强大而简单.智者,驭时而进 唯一的对手是上一个自己。要有舍才有得! - 手机数码电玩维修...
  16. 亚马逊AWS·优维科技EASYOPS企业云计算研讨会 邀请函
  17. 常见的中成药神奇疗效
  18. 医院管理信息系统java版本
  19. 七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)+购物车的实现代码
  20. BAT 脚本转 EXE 工具

热门文章

  1. 被女孩子冷落了,最适合看的20句话
  2. 为MFC应用程序添加全屏幕显示功能
  3. Python用户界面编程PyQt5的四种的布局方式
  4. 程序员会写诗是怎样的体验
  5. 微软 Edge 浏览器将推出 iOS 和 Android 版
  6. 湍流退化图像复原如何使用matlab,湍流退化图像复原技术研究现状及展望
  7. 导师没有教你的“潜规则”
  8. 清朝神秘女科学家,在国外火了200多年,我却对她一无所知…
  9. Animation Studio插件怎么用?Nitrozme Animation Studio Packages Mac(AE插件拓展包) 安装教程
  10. ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放