C语言之指针初步
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
//指针的基本概念详解
//一.总述:
//静态存储区:动态存储区:。。。不同变量会保存在不同的存储区里
//a)有些变量的内存 是在编译时分配的
//b)有些变量的内存 是在程序运行时分配的
//但不管怎么说 变量都是会占用一段内存空间的
//int float double char 都占用一定的内存空间的 sizeof(类型)
int isize = sizeof(double);
printf("isize:%d\n",isize);
//二.地址的概念
//传统生活中 我们表示一个地址 可以用文字描述
//XXX市XXX区XXX路XXX号:是一堆人能看懂的文字 确实能代表一个真实的地址
//如果我们按照这个找的话 肯定能找到一个实际的地理位置
//计算机中的地址什么意思呢?
//其实跟我们人类社会中地址基本一个意思
//计算机中 使用一个数字来描述一个地址 比如1000(十进制数)
//计算机比较喜欢十六进制数来表示地址
//比如1000这个地址 :0x3E8 (都是0x开头的):如果去内存中去找1000这个数字所代表的地址 我就能找到
//总结起来:地址这东西,在计算机中,其实 这就是一个数字 代表一个内存位置而已 就这么简单
//严格区分:地址和地址中内容的区别
int i = 5,j = 6;//int四个字节 这个5就保存在这四个字节里
//程序内部会维持着一张表
// 1000--- i(int)
// 1003--- j(int)
//用地址值联系i,j和5,6
printf("i:%d\n",i);//直接访问
//比如说在这里地址值是1000,但是这里地址值所存的内容是5
//三.直接访问和间接访问
//直接访问:按变量地址存取变量值
//间接访问:将变量i的地址存放在另一个内存单元中
//在C语言中,我们一般定义int char float这些变量 我们一般用这些类型的变量来进行存"值"
//我们也可以定义特殊的变量这种特殊的变量用来保存地址
//假设我们定义了一个变量mypoint 来存放"整型变量的地址"
//大家注意:虽然特殊变量是保存地址的,但是他也分保存到什么类型的
//如下语句:
//mypoint = &i; //这就把变量i的地址保存到了mypoint当中
//理解成:mypoint指向了i 所谓指向:就是把通过地址体现
//他存的是地址值也就是1000
//大家注意:虽然这个mypoint是用来存放整型变量i的地址的 mypoint这种特殊变量本身在内存中有地址 所以它本身就是占内存的
//这种特殊变量mypoint一般是占四个内存的
//间接访问 我们就有了间接的访问手段
//a)先找到存放i的地址的这个内存位置,(3000~3003) 也就是mypoint的内存地址 从这四个字节的内存中,取出i的地址(1000);
//因为我们知道mypoint他里边保存的是整型变量i的地址,整型变量占得是4个字节 这表示1000这个地址开始的是4个字节里边是个整型数据
//那么我们就从1000开始取得4个字节数据,也就是这个5;这个就是i的值;这个就是所谓的间接访问
//确定一个概念:
//指针变量:如果一个变量,比如mypoint,专门来存放另一个变量的地址,则称这个变量为"指针变量";mypoint就是个指针变量
//指针变量的值(也就是其中存放的值) 是个地址 (指针)
//有人叫地址也叫指针
//指针变量:"指针变量"和"地址/指针"两个概念 指针就是个地址(也用数字表示)
//指针变量是存放其他变量地址的变量,也叫该指针变量指向某某变量(比如这里的mypoint指向i);
}