设为首页 加入收藏

TOP

c语言编写经验逐步积累3(二)
2015-01-22 21:30:38 来源: 作者: 【 】 浏览:89
Tags:语言 编写 经验 逐步 积累
r **p =a;出现编译错误,类型不匹配不能赋值因为a表示的是一个指向一维数组的指针,即char (*a)[3]这个类型.a+1是会偏移3个单位。p是一个指针的指针,称为二级指针。所以两者类型不一样。
26.数组名取地址在《C和指针》p142中说到,在以下两中场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。
所以&a后返回的指针便是指向数组的指针(类似于(*p)[3]),跟a(一个指向a[0]元素的指针)在指针的类型上是有区别的。&a+1是偏移一个数组sizeof大小的尺寸,因为&a是指向数组指针的地址,是一个数值指针。但是作为形参时,一级数组名就转为了一个普通的一级指针而已。
27. 二维数组名不能简单的理解为2级指针,而是要从数组的系统结构上去了解。个人认为二维数组名其实就是一个指针,但是他指向的数据类型是一维数组的这么个数据类型。即数值指针,其实可以理解为功能和二维数组名类似。至于数据访问,完全是编译器来自动完成栈区的访问。

28.数值名不能修改,是因为在栈区域内已经定好了ebp,基地址。访 问数组都是基于这个ebp来进行的。所以,给数组名赋值变得没有意义,肯定不允许修改ebp的。所以在编译阶段就报错。
29.fseek和发tell配合来完成确定文件大小的过程。fseek(fPtr,0,SEEK_END);file_size = ftell(fPtr);fseek(fPtr,0,SEEK_SET),位置指针复位进行读写操作

30.两数交换不使用第三个缓冲区,三条代码的方法:主要通过运算符来实现。
A = A^B;B = A^B;A = B^A;
A = A+B;B = A-B;A = A-B;





首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言编写经验逐步积累4 下一篇Objective-C中的属性(property)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: