大家好,今天小编关注到一个有意思的话题,就是关于c语言的类型转换的问题,于是小编就整理了3个相关介绍c语言的类型转换的解答,让我们一起看看吧。
- C语言规定,函数返回值的类型是由( )。A. return语句中的表达式类型所决定B. 调用该函数时的主调函数类?
- C语言的指针不是地址吗?为什么地址还要区分类型?指针的加法也好难,该怎么理解呢?
- c语言源程序文件经过连接后生成文件的扩展名是什么?
C语言规定,函数返回值的类型是由( )。A. return语句中的表达式类型所决定B. 调用该函数时的主调函数类?
当然是由函数决定的啊:
比如声明一个函数
int prot(int *, int);
那么这个函数的返回值int型返回值。
可以写成return XX -->XX是int型,如果这里你写成其它型的(如A说的),编译会报错
再就是函数声明写成prot(int *, int), //不给他声明返回类型。
PC机会隐式的让返回值为int型,如果你return 0.32, 返回去的值其实是0.
C语言的指针不是地址吗?为什么地址还要区型?指针的加法也好难,该怎么理解呢?
c的指针确切说是俩寄存器,里面存放地址。
区分数据类型是为了更好保护内存不被随意改写,编译器能检查出来,实际是不区分类型的。
学指针时候可以看看汇编语言,加强对指针的理解。其次用画图方式,把内存画出来,再去思考指针的指向动作。对指针加法操作时,就是给寄存器赋上基础地址并根据数据类型位数算出偏移地址写入寄存器,然后cpu进行执行。
谢谢邀请。
题主的疑问应该是,C语言的指针变量里存放的是地址,而地址明明是一个整数,为什么整数还要区分类型?至于指针的加法,题主应该是注意到了有时候 1+1 并不等于 2,对不?其实这并没有什么难的,请继续往下看。
稍稍思考一下,应该能够发现,C语言中的指针是通过修改内存来修改变量的值的。
既然指针是通过修改内存来修改变量的值的,那么,一个指针一次修改多少内存呢?这就涉及到指针的类型了。请看例子,相关C语言代码如下:
对于数组 i[8],i 其实就表示这个数组的首地址,所以可以直接把它赋值给指针变量 p1。这样一来,我们就可以通过 p1 来修改数组 i 了。
指针 p1 是 signed char* 类型的,通过 p1 修改 i 所在内存时,一次修改 sizeof(signed char) 字节,也即 1 字节。那么,p1+1 指向的就是 i 的第二个元素(i[1]),执行 * (p1+1) = 5; 以后,i[1] 就等于 5 了。
按照这个逻辑,p2 是 int* 类型的指针变量,请看上图,通过 p2 访问数组 i 时,一次访问的实际上是 sizeof(int) = 4 字节内存。所以 * (p2+1) = 9; 实际上修改的是 i 的第 5~8 字节。
你新,新,新,新来的吧?你不告诉指针它指向的内存存储的数据类型,它给你返回几个字节?指针指向的都是数据的首地址,一个指向内存中某个字节的地址而已,但它要返回后面多少字节的数据,需要你告诉它。感觉我讲得比较粗俗,水平低,没法讲得更文雅(=^▽^=)
类型说明了指针指向内容的数据长度。为了你不把内容操作错误,C语言编译器在检查类型。
当然,如果你能确保逻辑和内容长度的正确性,在C语言层面你也可以强行转换成另外的指针类型。
在汇编语言中,内容是没有类型的,只有内容长度。连内容整数符号都不明确说明,整数的符号体现是在操作数据的不同机器指令来体现的。
C语言指针类型的差别只是为了在语法层不让你轻易犯错。
c语言源程序文件经过连接后生成文件的扩展名是什么?
选择C.”.exe“
解析如下:
文件编辑的时候源码是CPP扩展名,C++头文件是.H扩展名。编译源程序文件转换成.obj扩展名的目标文件。链接将一个或多个目标文件与程序用到的库文件链拉起来,形成一个可以在操作系统直接运行的执行程序.exe。
也就是整个过程分为:预编译,对源代码的宏进行替换,生成中间文件(文本,默认不保留)》》翻译为汇编代码(文本,默认不保留)》》由汇编器生成二进制文件(.obj)》》连接为可执行文件(.exe)。
扩展资料
一、编译
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
① 可以立即执行的机器语言代码,所有地址都重[_a***_];
② 待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
到此,以上就是小编对于c语言的类型转换的问题就介绍到这了,希望介绍关于c语言的类型转换的3点解答对大家有用。