您的位置:首页 > 编程语言 > C语言/C++

c语言大世界————05一时瑜亮?

2014-11-15 21:27 218 查看
前言:

以下内容需要一定的C语言基础,对指针要有稍许了解。此外内容不多,希望按照顺序看下去,或许对你有一定帮助。

内容均以代码+注释给出。时间有限 暂时给出上半部 见谅 算是基础入门吧

/*
	demo5: 一时瑜亮 
*/
#include "stdio.h"

int main(int argc,char **argv)
{
	/*
		example01:讲解指针 
		首先把指针当做地址吧,记得我文章提到内存空间,想象成一排房屋一字排开
		无限延生,从0开始编号,1,2,3... 就是房屋号码。下面的a_addr 用&取址符号
		获得 我在c-free中测试地址是0x28ff44 。这里的0x28ff44就好比是房屋编号。
		int *pt_a。'*'这里的作用是告知编译器pt_a是一个指针,这个变量可以存地址
		比如0x28ff44。
		对于使用 我们还是得用到'*'  比如 *pt_a = 1; 这里理解也很简单,pt_a是一个地址
		加上* 表示指向了这个地址内部的数据,好比pt_a = 100,地址100,在房屋号100
		*pt_a '*'打个比方,是一把进房屋的钥匙?我打开门了 存了一个东西(也就是赋值1)
		两处'*'的作用懂了吗?
		NEXT--> 
	*/
	int a_addr = 10;								//内存地址0x28ff44房屋内的内容是10哦 
	printf("the a_addr address is 0x%x\n",&a_addr); //输出0x28ff44(或许你是别的)。 
	int *pt_a; 
	
	/*
		example02:两种声明 
		前者声明整数b 后者声明指针 类型为int 名为pt_b
		有人曾问我,OK 你说pt_b是一个地址 地址嘛 无非就是一个整数 像1 2 3 ...
		或者说上文的0x28ff44  既然那么说,好啊,我就声明一个整数b赋值0x28ff44 
		然后赋值给指针变量pt_b(引文指针变量嘛 说的直白点就是用来存储地址的!)
		你会那么写pt_b = b; 一运行,啪!报错,"invalid conversion from 'int' to 'int *' " 
		知道为啥报错吗? 因为b的类型是整数(int), pt_b的类型是指针(类型int) 两者可不等价
		那么现在怎么解决这个问题,简单 类型转换下,既然int (int *)两个类型不一致,我就
		来捣乱下,用强制转换方法来(int *)b, 意思就是0x28ff44现在不是int 类型了,而是表示
		一个地址啦。那么pt_b=0x28ff44, OK啦 知道我们的房间号是多少啦,还不用钥匙打开看看
		里面有啥数据 快点调用*pt_b 
		NEXT--> 
	*/
	int b;
	int *pt_b;	
	b=0x28ff44;
	pt_b = (int *)b;
	printf("该地址上的内容是%d\n",*pt_b);//不出意外是10.....因为前面a_addr的值10 
	/*
		example03:
		先来看前3行代码,so easy c_0 c_1都是类型为int 的整数。而int c[2]就是等价
		这两个声明,我这只写了两个 要是100个呢,难道你要int c_0 int c_1 ... int c_100
		果断用int c[100]啊
		指针一样的道理 int *c_pt0 int *c_pt1  我嫌这个太麻烦 于是我写成了数组 int *c_pt[2]
		这样写就有点等同于 这个数组有2个元素,由于声明用int * 那么存储的就是指针啦,不管是
		c_pt[0] c_pt[1] 都是表示一个指针
		这里实在简单 不做扩展啦
		NEXT--> 
	*/ 
	int c_0;
	int c_1;
	int c[2];
	int *c_pt0;
	int *c_pt1;
	int *c_pt[2];
	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: