C/c++语言中的关键字:
类1:数据类型关键字
Char , int, float, double,long,short,signed, unsigned, enum , struct, union, class, void
类2:控制语句关键字
循环语句: For ,do, while,break,continue
条件语句:if ,else, goto
开关语句:swith, case, default,return
类3:存储类型关键字
auto , register, static, extern,
类4:其他
sizeof, typedef,const,volatile
C++中部分的关键字:
类1: public, protected, private;
注意:c中的struct没有行为,不可以定义函数,但可以有函数指针;
c++中的struct可以定义函数,默认为private;
C++中struct 和class的区别:
1)默认继承权限:class,private ; struct ,public;
2)默认成员访问权限:class,private, struct,public;
关于sizeof,请记住:
计算变量所占的空间时,()可省去,计算类型大小时,()不可省
![](http://hi.csdn.net/attachment/201111/25/0_1322186386kXNh.gif)
有关sizeof的计算题:更多大小端字节与sizeof()举例见我的博文:
1.
void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}
注意:
sizeof()与初始化无关,sizeof是关键字(在编译时完成),但strlen()是函数在运行时求值,与初始化有关,不初始化可能导致错误
2.给定结构structA
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A)= ? 8
3、设有以下说明和定义:
typedef union {
long i;
int k[5];
char c;} DATE;
struct data {
int cat;
DATE cow;
double dog;} too;
DATE max;
则语句printf("%d",sizeof(structdate)+sizeof(max));的执行结果是:_____
【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型int[5], 占用20个字节. 所以它的大小是20
data是一个struct, 每个变量分开占用空间. 依次为int4 +
DATE20 + double8 = 32.
所以结果是20 + 32 = 52.
int a[5];
sizeof(a)=sizeof(int) * 5=20;
sizeof(a[10])=4;
取地址:
sizeof(&a[1])=4;
sizeof(&a)=4;
5:
main()
{
Int a[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
int* ptr2=(int*)((int*)a+1);
printf(“%d,%d,%d”,*(a+1),*(ptr-1),*ptr2); 结果:2,5,2
}
数组名a作为右值,代表数组首元素地址&a[0];而并不是数组的首地址,尽管两者数值相同;
数组名a不能作为左值,可以访问数组中的某个元素(如a[0],a[1],可以作为左值),但是不能对数组整体访问;
类似++a,不成立。
地址 0-3 4-7 8-11 12-15 16-19 20-23
数值 1 2 3 4 5
&a+1 就是地址为20的地方
*ptr1[-1]就是20-4=16这个地方 一个Int 占用4个地址
(int)a+1 跟(int*)a+1不一样 前者地址为1 后者为4,
所以,int *ptr2=(int*)((int)a+1);*ptr2表示的是指向地址为1的指针地址
有关符号的计算:
![](http://hi.csdn.net/attachment/201111/25/0_1322186513MCA2.gif)
注意:
1.char在默认情况下位有符号,数值范围是【-128,127】,超出此范围产生溢出,负数以补码的形式存放;
2.溢出时,取低8位;当-255,全0
3.strlen(),计算字符串长度不包括最后的’\0’;
追问三个问题:
1. 0与-0,在内存如何存放?
0与整数都以原码存储,并不存在-0的补码的说法;
2. int i=-20;unsigned int j=20;
i+j= 32808
有符号数与无符号数相加时,都转为无符号数
3. unsigned i ;
for(i=9;i>=0;i--)
{ printf("%u\n",i); }
答:无限循环中~~分析struct ,class, union
Struct成员默认是public;class成员默认是private;
在union中成员默认是public,所有的数据成员共享一个空间,同一时间只能存放其中一个数据,
所有的数据成员拥有相同的起始地址;主要用来压缩空间,存放不会在同一时间同时用到数据;
大小端字节对于union的影响:
例:
在小端字节序中;u.i=0x3839;
在大端字节序中:u.i=0x3938;
在栈中数据存放从高地址向低地址;
对联合体任何数据的访问都是从首地址开始的;