c 语言的一些知识
2013-08-08 13:55
232 查看
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会变的很大,所以不会进入循环。
阅读(51) | 评论(0) | 转发(0) |
0
上一篇:java 中读取文件最后一行信息
下一篇:html中meta标签的使用
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
那一台服务器也没5T的存储空间...
公司有5T的数据用于下载,数据...
CACTI监控ESXI中的虚拟机,监...
如何挂载一块以前做过LVM的硬...
做主主同步,只同步个别的几张...
给主人留下些什么吧!~~
评论热议
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]
从图中可以看出 &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会变的很大,所以不会进入循环。
阅读(51) | 评论(0) | 转发(0) |
0
上一篇:java 中读取文件最后一行信息
下一篇:html中meta标签的使用
相关热门文章
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
那一台服务器也没5T的存储空间...
公司有5T的数据用于下载,数据...
CACTI监控ESXI中的虚拟机,监...
如何挂载一块以前做过LVM的硬...
做主主同步,只同步个别的几张...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 一些C语言基础知识
- 《Linux C编程实战》中一些基础C语言知识 && 一些笔试面试题总结
- 02-C与OC语言的一些小知识
- Oc语言一些基础知识总结
- 【C语言基础】关于结构体,枚举,联合,位段的一些知识
- 整理的一些面试常问语言知识
- C语言基础ask‖码一些知识
- css和javascript的一些笔记(四) xml语言基础知识
- 积累一些不太常用的C/C++语言知识(不断更新)
- 跨语言站点搜索中word breaker相关的一些知识和技巧
- 一些汇编语言相关知识
- python初入门:与其他语言略有区别的一些基础知识1
- 关于堆和栈的一些知识(转贴)
- java的一些基本知识
- Android中的一些小知识
- 汇编语言中对PSP区和程序区的一些理解
- LCD的一些基础知识
- U3D-- U3d Shader的一些知识
- 总结了一些关于JQuery的知识
- 与 STL 相关的一些知识