相对于视频,我还是更喜欢书。当然我视频也看过不少,但都是我在做别的事情的同时。
前段时间帮一个朋友用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:字符串变量是只读的,在参数中看到字符串数组其实是指针
*/