精华内容
下载资源
问答
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制...
  • C语言深度解剖(c语言进阶好教程) 目 录 第一章 关键字................................................................................................................................... 9 1.1,最宽...
  •  本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并...
  • C语言编程要点

    2017-09-18 00:10:37
    5.7. 与用#define指令说明常量相比,用enum关键字说明常量有什么好处? 81 5.8. 如何使部分程序在演示版中失效? 82 5.9. 什么时候应该用宏代替函数? 83 5.10. 使用宏更好,还是使用函数更好? 83 5.11. 在程序中加入...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  • 怎样创建无名的中间的常量结构值?  2.12 怎样从/向数据文件读/写结构? 结构填充  2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者...
  • 怎样创建无名的中间的常量结构值? 26 2.12 怎样从/向数据文件读/写结构? 27 结构填充 27 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充...
  • 怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13 为什么我的编译器在结构中留下了空洞?这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制...
  • 本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别...
  • 一、选择题1. 如下程序:程序运行后输出结果是( )。...函数体中将指针变量*data对应地址的值进行加1处理,再返回加1前data 值。main ( )函数中,定义了变量data 并赋初值56,调用covert ( )函数,...

    一、选择题

    1. 有如下程序:

    程序运行后的输出结果是( )。

    A.56,57,

    B.57,58,

    C.57,57,

    D.55,57,

    答:C

    【解析】convert ( )函数定义了一个形参:指针变量*data。函数体中将指针变量*data对应地址的值进行加1处理,再返回加1前data 的值。main ( )函数中,定义了变量data 并赋初值56,调用covert ( )函数,改变变量data 的值,此时data=57; 程序执行data=convert

    ,函数convert ( )返回的是执行前data 的值,所以data=57。C 项正确。 (&data)

    2. 已知大写字母A 的码是65, 小写字母a 的码是97。以下不能将变量c 中的大写字母转换为对应小写字母的语句是( )。

    答:A

    【解析】A 项,模26运算后得到0~25之间的数,再与‘a ’相减结果是负数。B 项,

    表中,同一字母的小写码比大写码数值上大32; C 项,

    价于C 项。

    第 2 页,共 33 页 码D 项,c-‘A ’取值在0~26, 等

    3. 以下选项中表示一个合法的常量是(说明:符号表示空格)( )。

    A.999

    B.OXab

    C.123E0.2

    D.2.7e

    答:B

    【解析】十六进制数用数字0和字母x (或大写字母X )开头。OXab 是指十六进制数,是合法的常量。

    4. 以下不能输出字符A 的语句是。(注:字符A 的ASCII 码值为65,字符a 的ASCII 码值为97。)

    答:B

    【解析】A 项,字符a 的ASCII 码值减去32为A 的ASCII 码值,执行字符输出,即为A ; B 项,执行整型输出,结果为65; C 项,字符型输出A ; D 项,字符型输出答案A 。

    5. 以下选项中,能用作用户标识符的( )。

    答:C

    【解析】标识符是由若干个字符组成的字符序列,用来命名程序的一些实体。语法规则为:①标识符由字母、数字或下画线组成;②第一个字符必须是字母或下画线;③标识符最多由274个字符组成;④在标识符中严格区分大小写字母;⑤关键字不能作为自定义的标识符在程序中使用。

    6. 有以下程序:(注意:字母a 的ASCII 码值为97。)

    第 3 页,共 33 页

    程序运行后的输出结果是( )。

    A.d

    B.go

    C.god

    D.good

    答:A

    【解析】在funO 函数中,关键语句为

    good 中只有d 的ASCII 码值为偶数。

    7. 设文件指针fp 已定义,执行语句

    中正确的是( )。

    A. 写操作结束后可以从头开始读

    B. 只能写不能读

    C. 可以在原有内容后追加写

    D. 可以随意读和写

    答:B

    【解析】用方式打开的文件只能用于向该文件写数据,而不能用于向计算机输入。如果指定的文件不存在,系统将用在fopen 调用中指定的文件名建立一个新文件;如果指定的文件已存在,则将从文件的起始位置开始写,文件中原有的内容将全部消失。

    8. 有以下程序:

    程序的运行结果是( )。

    A.abcdef

    B.cbcdef

    C.cdef

    D.ab

    答:A

    【解析】strcat 把字符串a , b连接起来放在数组a 中,while 语句再将字符串a 赋给字符串b 。

    9. 以下选项中,合法的一组C 语言数值常量是( )。

    第 4 页,共 33 页

    即挑选出ASCII 码值为偶数的字母,在后,以下针对文本文件file 操作的叙述

    展开全文
  •  本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并...
  • 本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别...
  • 本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    难道在C语言中一个结构不能包含指向自己指针吗? . . . . 3 1.7 怎样建立和理解非常复杂声明?例如定义一个包含N 个指向返 回指向字符指针函数指针数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...
  • C语言深度揭秘

    2012-04-12 13:21:16
    目录 第一章 关键字...............9 1.1,最宽恒大量关键字----auto................................11 1.2,最快关键字---- register.....4.1.4,如何将数值存储到指定内存地址........ 76 4.1.5,编译器bug...
  • c语言深度剖析

    2012-08-18 18:59:34
    1.7.2,case 关键字后面什么要求吗?.............................................................. 25 1.7.3,case 语句排列顺序......................................................................
  • 难道在C语言中一个结构不能包含指向自己指针吗? o 2.7 怎样建立和理解非常复杂声明?例如定义一个包含 N 个指向返回指向字符指针函数指针数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
  • C语言深度解剖

    2012-08-09 19:43:35
    1.7.2,case 关键字后面什么要求吗?.............................................................. 25 1.7.3,case 语句排列顺序......................................................................
  • C语言的多维数组不就是数组的数组吗?不!两者是区别的,而且还不小呢。首先看看两者的共同点:1。内存映象一样。2。数组引用方式一样,都是“数组名[下标][下标]........”。3。数组名都是数组的首地址,都是一个...

    再一次吃惊--数组的数组与多维数组的区别
    看见这个题目,也许有些人就会嘀咕了:难道两者不是一样的吗?C语言的多维数组不就是数组的数组吗?不!两者是有区别的,而且还不小呢。首先看看两者的共同点:
    1。内存映象一样。
    2。数组引用方式一样,都是“数组名[下标][下标]........”。
    3。数组名都是数组的首地址,都是一个符号地址常量、一个右值。
    由于两者的共同点主要反映在外部表现形式上,因此,从外部看来,数组的数组跟多维数组似乎是一样的,这造成了C程序员对两者的区别长期以来模糊不清。但实际上,c语言限于本身的语言特性,实现的并非真正的多维数组,而是数组的数组。
    数组的数组与多维数组的主要区别,就在于数组的数组各维之间的内在关系是一种鲜明的层级关系。上一维把下一维看作下一级数组,也就是数组嵌套。数组引用时需要层层解析,直到最后一维。举个例,对于数组:
    int a[7][8][9];
    如果要访问元素a[4][5][6],首先就要计算第一维元素4的地址,也就是a+4,由于是数组的数组,元素4的值代表了一个数组,因此元素4的值就是它所代表的那个数组的首地址,我们用一个符号address1代表它,也就是address1=*(a+4),接着计算第二维,显然元素5的地址是address1+5,其值也是一个数组的首地址,用address2表示它,就是address2=*(address1+5),最后一维,由于已经到达了具体的元素,因此这个元素的地址是address2+6,其值*(address2+6)是一个整数,把address1和address2分别代入相应表达式,就成了:
    *(*(*(a+4)+5)+6);
    这就是我们熟知的[]运算符的等价表达式。

    而真正的多维数组并没有这么多“束缚”,相比之下简单得多,由于各维之间不是这种复杂的层级关系,元素a[4][5][6]的偏移量可以这样直接获得:(4*8*9+5*9+6)*sizeof(int),再加上数组的首地址a就是元素a[4][5][6]的地址了。但是,c语言的数组能够这样用首地址加上(4*8*9+5*9+6)*sizeof(int)的形式来访问元素吗?显然是不行的。归根到底就在于C语言的地址数据类型不但有类型,还具有级别。就是这种层级关系造成了C语言只能用数组的数组当作多维数组。如果C语言非得要实现真正的多维数组,那么地址与指针的概念就得重新改写了。

     


    摘自再再论指针

    展开全文
  • 按照我一贯理解, 一维数组名==首元素地址==常量,理解马马虎虎,日常使用并没有什么问题 直到一天我在思考一个左值右值问题时,发现了数组名不同 问题:既然数组名是常量,我们都知道常量不能当左值,所以...

    1.问题

    按照我一贯的理解, 一维数组名==首元素地址==常量,理解马马虎虎,日常使用并没有什么问题

    直到有一天我在思考一个左值右值的问题时,发现了数组名的不同

    问题:既然数组名是常量,我们都知道常量不能当左值,所以我认为int a[5];a=5;和5=5;应该有相同的报错,因为错误原因都相同:常量不能作为左值, 但是实际是这样吗?看看下面的结果, 是不是很困惑, 报错不应该都是赋值运算左操作数必须是左值的问题吗?

    root@ubuntu:/lianxi/lianxi_oj/array# gcc array_name.c -m32
    array_name.c: 在函数‘main’中:
    array_name.c:5:4: 错误: 将‘int’赋值给‘int[5]’时类型不兼容
    array_name.c:6:4: 错误: 赋值运算的左操作数必须是左值
    root@ubuntu:/lianxi/lianxi_oj/array# 
      1 #include <stdio.h>
      2 int main(void)
      3 {   
      4     int a[5] = {0};
      5     a = 5;//
      6     5 = 5;//
      7     return 0;
      8 }

    2. <C和指针>对数组名的阐述

    可以看到这里说得比较含糊, 但是能够粗略地看出一个事实:数组名首先是个常量, 在C语言中绝大多数用到数组名的表达式中编译器会把数组名解释为地址常量, 这时类型取决于数组元素的类型

    3. 搜索到的博客

    我把我搜索到写得好的博客贴在下面:

    https://blog.csdn.net/chuhe163/article/details/80795728

    https://www.cnblogs.com/liqiuhao/p/7737539.html

    http://blog.chinaunix.net/uid-27004869-id-3301282.html

    其中第二篇博客引用了C99标准中的话, 我们摘出来看看:

    这里我们又可以得出一个结论:在sizeof运算符, 取地址运算符&和本身就表示数组这三种情况下, 数组名表达式具有类型"array of type", 而在其他绝大多数的表达式中数组名表达式会被转化为地址常量

    4. 我的理解和结论

    结合上面的分析, 我把自己的理解和结论贴在下面, 如不正确, 请指出或者来日我有新理解会回来改正

    1).当程序完成链接后, 内存中数组的位置是固定的, 所以整个数组首元素首字节的地址编号也是固定的

    2).数组名是个符号, 类似于宏定义中的符号常量, 假如int a[5]数组首元素首字节的地址编号是0x08048000, 那么数组名类似于如下操作:#define a 0x08048000

    3).在sizeof,取地址符及本身就表示数组的表达式中, 数组名表达式具有"arrayof type"类型, 例如int[5]类型, 这一点也能解释在本文开头时给数组名赋值报错的原因

    4).在除开3)中的场景外, C语言中绝大多数的数组名表达式编译器会将其转化为地址常量, 如上例子, int a[5], &a[0] == 0x08048000, 那么:a[1] <=> *(a + 1) <=> *((int*)(0x08048000) + 1) <=> *((int*)0x08048004), 这有点类似于我们平常习惯的读写寄存器操作

    展开全文
  • 1.7.2,case 关键字后面什么要求吗?.............................................................. 25 1.7.3,case 语句排列顺序.......................................................................
  • C语言深度解剖_word版

    2010-04-25 22:21:15
    C语言深度解剖 word版 解开程序员面试笔试秘密第一章关键字......................................................................................................................9 1.1,最宽恒大量关键字...
  • 1.7.2,case 关键字后面什么要求吗?.............................................................. 25 1.7.3,case 语句排列顺序.......................................................................

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

c语言的常量有地址吗

c语言 订阅