相对于视频,我还是更喜欢书。当然我视频也看过不少,但都是我在做别的事情的同时。
前段时间帮一个朋友用aardio调用一个串口通讯的dll,一直没有调用成功,后来朋友换dll了反馈说是那个dll兼容性不好。当然基于硬件的自己手上没有相应的硬件也是一方面原因。但自己也还是发现了一个问题,自己对C的基本功还是不扎实,加上后来用C的时候不多,七七八八的都忘的差不多了,调用结构体的时候一不成功就晕了。刚好网上看到《嗨翻C语言》这本书,老外写的,很是风趣幽默,拿来再看看补补课。随书练习下,代码就放这吧。
** 简单的c程序重新复习学习练习,参考见《嗨翻C语言》 指针 2016-11-29 xiousheng@126.com **/ #include <stdio.h> void go_south_east(int *lat,int *lon){ //*引用存储地址 *lat = *lat - 1; *lon = *lon + 1; } void fortune_coolie(char msg[]){ printf("Message reads:%s\n",msg); printf("msg occupies %i bytes\n",sizeof(msg)); //其实字符传递的是指针,因此这里是4 } //出牌训练 int chupai(char cards[]){ char a_card = cards[2]; cards[2] = cards[1]; cards[1] = cards[0]; cards[0] = cards[2]; cards[2] = cards[1]; cards[1] = a_card ; puts(cards); return 0; } //五分钟剧情,神奇子弹案件 int zhidan(){ char masked_raider[] = "Alive"; char *jimmy = masked_raider ; printf("Masked raider is %s,Jimmy is %s\r\n",masked_raider,jimmy); masked_raider[0] = 'D'; masked_raider[1] = 'E'; masked_raider[2] = 'A'; masked_raider[3] = 'D'; masked_raider[4] = '!'; printf("Masked raider is %s,Jimmy is %s\r\n",masked_raider,jimmy); return 0 ; } int main(){ //指针学习 ,船停靠的位置 int latitude = 32; int longitude = -64; go_south_east(&latitude,&longitude); //&变量的存储地址 printf("停!当前位置:[%i,%i]\n",latitude,longitude); //字符串学习 char quote[] = "Cookies make you fat"; fortune_coolie(quote); //这里的主要用途是要表示传递字符串其实是传递的指针 //非诚勿扰练习题 int contestants[] = {1,2,3}; int *choice = contestants ; //引用数组地址,指向首地址应该为1 即contestants[0], contestants[0] = 2; //这里首地址变成了2 contestants[1] = contestants[2] ; //上面换了2下,这个 contestants 数组应该为2,3,3 contestants[2] = *choice ; //这里 contestants[2] 引用这个数组的地址首地址。2 printf("我选%i 号男嘉宾",contestants[2]) ; //五分钟剧情推理 int doses[] ={1,3,2,1000}; printf("服用%i 毫克的药\r\n",3[doses]); // 3[doses] 解析 //doses[3] == *(doses +3 ) == * (3+doses) ==3[doses] //出牌训练 char cards[] = "JQK" ; chupai(cards); //神奇的子弹,注意单引号和双引号的区别 zhidan(); return 0 ; } /* 知识点:1:&引用变量存储地址 *取回存储地址数据 2:字符串变量是只读的,在参数中看到字符串数组其实是指针 */