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

来源:互联网 发布:ipad上的淘宝不能横屏 编辑:程序博客网 时间:2024/05/04 14:17

前言:

以下内容需要一定的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];} 



0 0