c 语言的一些知识
来源:互联网 发布:京东怎么做淘宝客 编辑:程序博客网 时间:2024/04/30 09:44
1.在数组中比如int a[5],注意 a+1 和 &a + 1的不同之处,虽然a和&a的大小相同,但索表示的意义不同,也就是他们的基类型字节数不同, a+ 1所表示的a[1]这个值,但&a+1所表示的是a[5](溢出),&a是a数组存储区的首地址,当&a +1时,相当于加了一个int[5]类型大小的空间,int *p =(int *) (&a+1), 打印 p-1得到的是a[4]的值,c语言是一个强类型的语言,因为p是一个指向 int 型的指针,所以p-1就、会减4个字节,也就是一个int空间大小,使的p从a[5]地址处,降到a[4]处。
2. 比如int a = 3; 打印&a["welcome!"]会显示,"come",因为,数组元素中的[ ]是变址运算符,相当于*( + ),a["welcome"]相当于*( 3+"welcome" ),而"welcome"是一个字符串,它加3就像当于取它的第4个字符‘c',而取地址&是为了打印'l'后的字符串。
3. double a[2], *p, *q; p = a; q = p+1; 这里的加1是加的一个double类型的字节的空间,p,q能访问一个double类型空间大小的数,因此p和p+1会相差8字节(不同编译器会有不同),而int *a 和 a +1会相差4字节等等;而(int)q - (int)p 是多大?是double型字节数,因为数组是连续的空间,(int)q - (int)p就是将q,p的地址 值 转成int型相减,大小就是double型字节数;而(int *)q - (int *)p又会是多少?是2,(这里按double 8字节,int 4字节算的),这是为什么呢?这样来看,double *p 能访问的是一个8字节的数,而int *p能访问的是一个4字节的数,而将double *p强制转换成int * ,那编译器会把原来的8字节访问空间分成2个4字节空间,所以(int *)q - (int *)p等于2;
4.sizeof 运算符一般是不会对所要查询的表达式进行计算。比如 int i = 3; sizeof(i++), printf("%d\n",i); 显示的不是4而还是3, sizeof()还能根据表达式的类型或函数的返回类型进行进行查询。比如int a = 3; double b = 3; sizeof(a+b),显示的是8 ; char f() ,这是一个返回值为char的函数。sizeof(f())显示的是1. sizeof 是可以不加括号的,
但在这种情况下必须加(), 即sizeof(int); sizeof int .这样写是错的。
5. 一般情况下 int 是4个字节,现在假设有这样一个int 型的ox112a3e4f整数,它占满的4个字节。现在要将这个
整数的高低字节中的数进行交换,最后得到的是ox4f3e2a11;这里的要点就是怎样获取这4个字节中的数?其实可以个这样定义: union A{ int i ; char b[4];}a; 然后对i赋值,用b数组来获取个字节中的数。。。。。
6. 如果有这样的一个数组 int a[3][3] 和一个int (*p)[2] ; 使 p = a; 然后判断 &a[1][1] - &p[1][1] 是否等于0? 答案当然是否定的:因为,首先。可将数组看成是一个线性表,则:
a[0] a[1] a[1][1] a[2]
p[0] p[1] p[1][1] p[2] p[3] p[4]
从图中可以看出 &a[1][1] - &p[1][1] 等于1,而不等于0;7. 如果有这样的一个循环,char ch; for(ch = -3; ch < sizeof(int); ch++){printf("welcome here!\n");}, 猜测会打印几次字符串?
其实一次也不会打印,因为sizeof(int)所返回的是一个无符号的长整型,而ch 是一个有符号的字符型,当一个带符号的字符型于一个整型进行操作时,编译器会将低类型转成高类型,在这里,会将字符型的-3转成无符号长整型,进而-3会变的很大,所以不会进入循环。
上一篇:java 中读取文件最后一行信息
下一篇:html中meta标签的使用
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- 那一台服务器也没5T的存储空间...
- 公司有5T的数据用于下载,数据...
- CACTI监控ESXI中的虚拟机,监...
- 如何挂载一块以前做过LVM的硬...
- 做主主同步,只同步个别的几张...
- c 语言的一些知识
- C语言的一些知识
- 关于C语言的一些零碎知识
- C语言的一些零碎知识
- C语言的问题,关于temp参数的一些知识
- C++的一些知识以及和C语言的不同
- 转 嵌入式C语言中用到的一些知识
- C语言中一些比较基础而又重要的知识
- C语言的数组、字符串等一些知识总结
- C语言的一些误用和知识总结
- C语言的一些小技巧 小知识
- 黑马程序员-c语言数组的一些知识温故
- C语言一些最基本的排序知识
- 学习c语言指针的一些小知识
- C语言的一些误用和知识总结
- 一些简单知识的整理—C语言(一)
- C语言的一些误用和知识总结
- C语言的一些误用和知识总结
- How to install an SSH Server in Windows Server 2008
- java 中RandomAccessFile的使用
- Linux添加可执行文件/头文件/链接库的环境变量
- eclipse 快捷键
- java 中读取文件最后一行信息
- c 语言的一些知识
- html中meta标签的使用
- ubuntu下sublime Text 2编辑器安装教程
- ubuntu 下安装搜狗输入法
- Git常用命令大全
- ubuntu 下wi-fi创建
- apache虚拟主机搭建以及cgi程序的运行
- 使用mysql的随笔
- 远程拷贝东西