- 论坛徽章:
- 0
|
小的有char 类型,只有8个位宽。大的有long long 有 64个位宽..........................char表示8位的位宽。
---------------------------------------------------------------------------------------------------------------
char至少8位,但并非只有8位,long long也是至少64位,而非只有64位。
很多书籍包括标准,说这是个变量,你当然可以认为这就是个变量
--------------------------------------------------------------------------------------------
实际上,C标准并没有提出“变量”这个概念,虽然计算机程序设计语言理论主要讲述的是变量概念,但是C并不看重variable,而是object(也正因此,C的类型系统主要脉络是
从对象模型的角度来区分的),虽然C标准有些地方提到了variable这个词,但并不对什么是variable进行定义,因为它认为不需要。再次怀疑作者有没有阅读过或者理解好标准中的内容?
那么对应p这个用于存放地址的存储区域又是多少呢?32位的系统,是32位宽,64位的系统是64位宽。也就是说,无论你的一个指针,指向的存储区是8位宽的还是32位宽的,
哪怕是128位宽的(结构体类型的存储区域有这种情况,以后展开讨论),指针本身的存储区域的位宽只和系统有关。
-------------------------------------------------------------------------------------------------------------------------------------------------
这句话错误比较多,对指针的理解还需要较大的提升。指针的二进制宽度是实现相关的,C/C++标准仅保证void*具有最大的数值范围。换言之,
32位系统的指针不一定是32位,64位系统的指针当然也不一定是64位,更彻底地说,指针的二进制宽度是系统无关性的,它仅与编译器相关。
变量就是存储区
---------------------
这个定义错误,变量是有名对象,变量一定是有名的,但一段存储不一定是有名的。
j的空间分配只有一次。同时而每次循环均会对 j = 0;进行操作,而实际逻辑上是三个不同的空间。
-----------------------------------------------------------------------------------------------------------
这里用“空间”这个概念不够准确,存在某个环境真把它放相同的空间。应该强调这三个J是三个不同的对象!
局部代码风格不太好,例如:
printf("the data is %d\n",(int)strtol(argv[2],&argv[2],10));
完全可以改为两个语句。 |
|