神奇的C语言二:数组名是什么
来源:互联网 发布:天猫交易实时数据 编辑:程序博客网 时间:2024/04/30 04:34
对数组名取地址得到的是什么?看一个例子:
int a[10];printf( "%d-%d", a, & a);
在VC++中测试结果是,输出的两个数相同,都是数组在内存中的首地址,即 & a[0]。
猜测:这里的&会被编译器忽略。a在内存中是不存在的,内存中的是a[0] a[1]....a[9],上述printf打印的a在编译的时候就被替换成了a在内存中的地址。因为a是概念上的,而非内存中的,所以自然不存在地址,也就无法对它使用取址符。但是编译器很聪明,会忽略&。
这个猜测对吗?
看下面的程序:
int main(){//queuef();int a[5] = { 1, 2, 3, 4, 5 };printf("%d,%d,%d\n", *(a + 1), *(&a + 1), a + 1);return 0;}输出是什么呢? 求大神解答。
类似的问题:函数名是什么?
函数名是什么这个真的不重要,它只是一个编译时刻的概念,我们只需要按照正常的方式来编写程序即可!
如果您感兴趣,请继续阅读:
关于函数名会有很多奇葩的程序,例如:
void f(){printf("hello");}int main(){(***************f)();return 0;}
这是一个可以编译却”不正常“的程序 :)
记住编译规则就行:
一、编译器在处理 * funcName 时返回的还是 funcName;
二、编译器在处理 & funcName 时返回的是函数地址,一个unsigned int类型的符号常量值;
三、编译器在处理函数指针的取值和取址时的方式和一、二相同,即 * funcPointer 仍旧返回 funcPointer,& funcPointer 返回无符号符号常量。
有了上述规则,我们就容易理解为什么**********f是合法的,而&&&&&&&&&&f是不合法的了。
这只是编译器的处理规则,如果以后面试遇到这种变态题,相信您也可以自如应对了。
0 0
- 神奇的C语言二:数组名是什么
- C语言中数组名与&数组名的区别
- C语言——数组名、取数组首地址的区别(二)
- 神奇的C语言十:数组下标的语法
- c语言数组名的详细介绍
- C语言中数组名的理解
- 神奇的C语言三:二维数组与二级指针
- 神奇的C语言二十:谈谈类型转换
- 神奇的C语言二十一:谈谈位运算
- c语言零长数组及对数组名的理解
- C语言数组名及指向数组指针的小结
- C语言,数组,数组名,数组地址
- C语言中的数组名
- c语言数组名解释
- C语言的数组名的特殊情况
- C语言中数组名和指针的区别
- 【C语言】数组名&地址&地址中的值的访问
- c语言中的数组名代表的意义
- Effective C++ Item19 设计class犹如设计type
- 什么是WEB前端开发
- 使用openURL实现程序间带参数跳转详解
- MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读
- 关于NumberPicker的一些操作
- 神奇的C语言二:数组名是什么
- Linux 的启动流程
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Effective C++ Item 20 宁以pass-by-reference-to-const替换pass-by-value
- 让你的电脑成为移动WIFI。
- 职场中频繁跳槽引起的危害
- qt: exited with code -1073741515( 0xc0000135)
- OpenGL光照
- [翻译] AnimatedTransitionGallery