![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言晦涩难懂
Xiejunyi12
这个作者很懒,什么都没留下…
展开
-
C语言带限定符的指针的转换
一个指针可以转化为同一个类型的另一个指针,但增加或删除了指针所指的对象类型的限定符的情况除外。如果增加了限定符则新指针与原指针等价。如果删除了限定符,则对底层对象的运算仍受实际声明中限定符的限制。for example:1.增加了限定符,则新指针与原指针等价。我们将指针初始化指针a后,把指针a转化为const int *类型,我们仍能修改指针所指向的数据,则新指针与原指原创 2016-02-12 22:08:35 · 872 阅读 · 0 评论 -
C语言指针赋值0会产生什么结果?
思考一下对指针赋值为0会产生什么结果?用编译器试验了一下 会得到一个空指针!其实这种现象在C语言中是有定义的。值为0的整形常数表达式或强制转换为void *类型的表达式可通过强制类型转换、赋值或比较操作转换为任意类型的指针。其结果将产生一个空指针。原创 2016-02-12 22:22:05 · 3641 阅读 · 0 评论 -
C语言 extern 经常出错的一处
在一个源文件里定义了一个数组:char a[6];在另外一个文件里用下列语句进行了声明:extern char *a;请问,这样可以吗?答案与分析:1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为翻译 2016-02-13 22:38:50 · 2549 阅读 · 0 评论 -
C语言 typedef -----类型定义符的重新声明
存储类说明符为typedef的声明不用于声明对象,而是定义为类型命名的标识符。这些标识符称为类型定义名。有没有思考过类型定义名重新被声明会怎么样?还是否有效 ?或者被声明为另一种类型的定义符?答案见图!!!类型定义符经过重新声明就失效了。原创 2016-02-13 23:05:18 · 1580 阅读 · 0 评论 -
C语言的转换
先上题目#include int main(void){ unsigned char a = 0xff; char b = 0xff; int c = a==b; // true, or false? printf("C: %d\n",c);}输出是什么?其实不是1而是0!解析:如果int能够表示原始类型中的所有数值,那么这个数值就被转成i原创 2016-02-12 01:48:32 · 1254 阅读 · 0 评论 -
无符号数相减问题 C语言
int main(){ unsigned int a=50; unsigned int b=100; printf("%u",a-b); return 0;}结果是4294967246为什么呢?实际上 CPU里只有加法器 没有减法器 做a-b运算时,实际上是做了a+(~b)+1因为计算机运算采用补码运算a-b=a[补码]+(-b)原创 2016-02-12 03:17:36 · 20991 阅读 · 10 评论