《嗨翻C语言》随书练习一 存储器和指针
编辑时间:2017-03-26 作者:金满斗 浏览量:1765 来源:原创

相对于视频,我还是更喜欢书。当然我视频也看过不少,但都是我在做别的事情的同时。

前段时间帮一个朋友用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:字符串变量是只读的,在参数中看到字符串数组其实是指针 
 
*/


来说两句吧