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

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语言为什么要规定对所用到的变量要“先定义,后使用”...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

  2. 在c语言中函数的定义变量的值为,变量定义(C语言中变量的声明和定义)

    变量定义(C语言中变量的声明和定义),哪吒游戏网给大家带来详细的变量定义(C语言中变量的声明和定义)介绍,大家可以阅读一下,希望这篇变量定义(C语言中变量的声明和定义)可以给你带来参考价值. 3.函数 ...

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

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

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

  5. c语言规定 程序中用到的变量一定要,C语言为什么要规定对所用到的变量要“先定义,后使用”...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

  6. 字母c语言定义为什么变量,C语言为什么要规定对所用到的变量要“先定义,后使用”...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

  7. c语言定义64位的变量,李洪强-C语言9-C语言的数据,变量和常量

    一.数据 图片文字等都是数据,在计算机中以0和1存储. (一)分类 数据分为静态数据和动态数据. ①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的.一般以文件的形式存储 ...

  8. c语言变量声明放在开头,C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?...

    报错信息:error C2065: 'salary' : undeclared identifier #include void main(){ printf("我的成绩是100分!&quo ...

  9. python定义一个复数类complex、内有两个成员变量_python(一):python语言基础

    一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...

最新文章

  1. TypeScript 1
  2. Uva1600 巡逻机器人
  3. 人口普查系统_晋江市召开第七次人口普查区域划分及标绘系统操作培训会
  4. linux nginx 安装出错,Linux Nginx安装以及可能出现错误
  5. Alibaba Druid未授权访问漏洞记录(敏感目录,端口:不确定)
  6. Qt Quick QMl学习笔记 之图片浏览器
  7. 登录之回车登录和记住密码
  8. scenario和group执行的区别
  9. java restclient 调用_restclient 访问 springmvc java工程接口
  10. 随手记_PPT设计风格参考
  11. 编程新手导论(转载)
  12. android屏幕共享及远程控制,android屏幕共享及远程控制原理
  13. 普源示波器 电脑 连接 软件_乐高wedo2.0电脑软件安装及蓝牙连接方法
  14. 一次nginx 502 mysql not contect 排错经历
  15. 如何把IP-GUARD发布到公网IP来管理全国分公司的终端
  16. Excel 去除重复项的几种常用技巧
  17. NOSQL 之 Graph Database 之 neo4j
  18. 完美世界刘航:异构计算要避免昙花一现
  19. 英汉词典mysql_构建英汉词典数据库 java
  20. 如何快速在CAD中批量提取坐标点数据?

热门文章

  1. 创建WebPart时的数据库连接问题。
  2. React基础学习(第一天)
  3. k8s学习笔记-调度之Affinity
  4. C语言——反弹球游戏(第二阶段
  5. 二维树状数组模板(区间修改+区间查询)
  6. sql server规范
  7. 每日英语:Apple Unveils New iPads
  8. Hibernate中对增删改查的小结
  9. Asp.net如何截屏
  10. javascript --- 几个其他的跨域技术(图像Ping、JSONP、Comet)