C语言经验技巧【三】(转载)

发信人: ahphone (幸福如猪|我还不如去睡觉长肉), 信区: C
标  题: C语言经验技巧【三】(zz)
发信站: 饮水思源 (2005年01月01日08:31:17 星期六), 站内信件

数组指针
int (*p)[4];
是定义一个指向四个元素的数组指针
main(){
{
int a[4];
int (*p)[4];
int count;
p=a;
for(count=0;count<4;count++)
{
printf("%d",*(p+i));
}
}

指向数组的指针运算
int a[3][4];
*(a+2)+3 ?è&a[0]+11 同样也可以为下式:
*(a+2)+3 ?è &a[0][0]+4*2+3
因为a[0]和a[0][0]都代表了首地址

扬声器发音
sound(n); /*n是一个过百位数的数,比如100、200之类的数 到什么数没有我都不太清
楚了!*/
delay(1000); /*声音时间长度 也可以用sleep(1)*/
nosound(); /*关闭声音*/


调试后看结果的问题
一个网友的问题"用一些c的编译器编译程序,在执行时,弹出的ms-dos窗口对结果数据
显示的太快,我还什么都没看到呢,窗口就关了,怎么办呀?"
其实可以用这个命令getch();来到停止当时的程序。


复合运算符的特别运算
a/=b+c
这些都是一定先求了左边的才运算这个复合运算。

特殊的按键(方向键等)
在C语言扫描码是所有键盘上的识别码,ASCII码也是键盘里的字母和数字。但是就是有
些特殊的键盘表达不出来,通常我们编程常常就需要这些按键,就象方向键和HOME、END
,F1、F2……等之类的键。可是我们就只知道ASCII码,其实有一个技巧可以得到它的扫
描码。程序如下:
int key;
key=bioskey(0); /*得到扫描码和ASCII 高八位扫描码,低八位ASCII码*/
if ( key & 0x00ff ) key=key&0x00ff; /*如果低八位有的话就证明这可以用ASCII表达
出来的*/
else key=key>>8; /*否非则是向下移动八位取得高八位的扫描码*/


动态伸请数组
我们定义一个数组常常是规定了其长度,如果定义得少就不够用,定义得多了就会浪费
空间,那么我们怎么来控制这种场面呢?是有方法的,因为不是太直观所以都没有常用

int *ab;
ab=(int *)malloc(n*sizeof(int); /*n这里是变量,随自己输的*/
这样就生成了一个指向n个空间的新地址,赋给了ab,ab就为首地址,像我们平时用数组
一样的形式调用第几个元素
ab[0];/*这里是第一个元素*/
ab[1];/*第二个元素*/
其实当然也可以算指针的形式一样*(ab+0)和 *(ab+1)一样来到调用。
更灵活的一点就是不用的空间可以随时给删除,用free()这个函数
free(ab);这里只是删除当前ab指向的那个空间,而不是全部删除,知道了这点我们就
可以利用循环等其它方法来批量删除或其它特别的用途,这完全要靠自己的想象力了。
 

posted @ 2007-01-30 10:11  qqivoryqq  阅读(272)  评论(0编辑  收藏  举报