现在的位置: 首页 > 综合 > 正文

c 语法部分补充2

2013年10月29日 ⁄ 综合 ⁄ 共 1051字 ⁄ 字号 评论关闭

关于const 和非const

const int a = 234;

int b ;

b = a;

对于值来说这个是没问题 非const = const;

但是对于指针来说就不行

int value = 234;

const int* a = &value;

int* d ;

d = a;

这个肯定会错 为什么?如果我修改d的值不是就可以修改a的值了,因此对于指针来说非const != const ;

当然不管是否是指针都允许const = 非const ,这样被赋予的值不能修改右值 ,因此被允许

 

printf('/n')  单引号引起来的是一个整数 而双引号引起来的是一个字符串指针
char a[] = {'a','b'}; printf(a); 这个只能说明a[] 运行时,系统会自动为a分配一个空间也许该空间不是a的范围,如果没有遇到终结符’/0‘ 或者0,那么后面几位就会出现乱码
a+++++b 根据编译器的”贪婪性“ near-ambiguity 这个时候会出现expression must be a modifiable Lvalue
然后我们这样处理 (a++)+(++b) 那么就会没有问题,这个是为什么喃?
a++ 当遇到下一个+的时候 编译器截断,应该+++没有意义 ,继续 ++又被组合在一起 ,也就是上面的表达式被理解为((a++)++)+b ,因此会出现错误;a++在该表达式中还没有被计算出来就继续累加,造成了该错误

FFFFF 该16进制是系统存储器的范围值,那么怎么计算喃?
看下面的值:FFFFF  = 也就是20个1 也就是16的5次方
看下面的程序:
int _tmain(int argc, _TCHAR* argv[])
{
 int sum = 0;
 int temp = 1;
 for(int i = 1;i< 21;i++)
 {
    for(int j = 1;j < i ;j++)
    {
     if(i == 1)
     {
      temp = 1;
      continue;
      }
                       temp *= 2;
    }
    sum += temp;
    temp = 1;//每次都有不同的值 因此用清空temp
 }

 printf("%d",sum);
 return 0;
}

FFFFF = 100000 != A0000 我自己在转化中习惯了10就等于A 其实A在2进制中为1010

FFFFF 是1m的地址 也就是系统存储区 她又分为2部分 0H- A0000H(640k)为基本存储区 ,A0000H-FFFFFH为高端存储区

FFFF:FFFF =》 FFFF0+FFFF 为实地址方式的寻址能力 ,它可以达到1M外64k ;这部分又叫做HMA

 

 

抱歉!评论已关闭.