硕彦博创学习记录——2018.7.20 & 2018.7.23(指针)
1、物理地址:内存条上连续的编号
2、指针:就是地址
3、变量:
整型变量: int a=100; 整型变量:专门存放整型的值
指针变量:专门存放指针的变量
运算符:
1、取变量地址:&
2、引用地址的内容:*指针
定义:类型 *变量名
引用指针变量:引用内容 注:引用指针内容的长度取决于指针的类型
注:所以指针变量都占4Byte (32位系统)
4、通过指针修改空间的内容:*pb=100;
5、(***)指针的运算:只有+ -没有* /
int* pa;
pa+n==pa+sizeof(int)*n //指针是向元素的地址,p+n是向后移动sizeof(int)*n字节
总结:指针+n 指针向高位移动n个元素,指针+n*(指针类型) (n位整数)
指针-指针:得到两个元素之间的间隔差
printf("%d\n",(buf+9)-buf); //结果为9
指针之间只能-不能+,即不能指针+指针
指针可以+ -常量
6、空指针:Null
1、空指针类型:没有意义的,只是一个指针空间,用于记录地址(不能运算)
void* 变量:
注:由于空间指针void*不知道尺寸(类型),不能进行+ -运算
2、空指针:每个数据空间都有地址(地址>0),设置地址为0的指针为空指针
注:指针变量必须初始化
typedef NULL (void*)0;
7、指针与数组的关系:
定义数组:类型 数组名【长度】
概念:连续
8、生命周期:分配空间到释放
1、动态变量:auto
2、静态变量:
3、堆区(程序员空间):空间由用户申请,由用户来释放空间。
API:申请:malloc(size_t) 注:bytes代表字节的数量
释放:free
注:malloc/realloc返回值为NULL时,申请失败
使用步骤
1、申请 p=malloc(size_t)
2、使用
3、释放
//1、申请一个整型空间
int* p=NULL;
p=(int*)malloc(sizeof(int));//申请4Byte空间,返回地址.返回值为void*
//型,强制类型转换为int*
//2、使用:存储值到堆区
//p=1000;//这时p的内容为1000,是一个地址,指向地址为1000的空间,
// 没有指向申请的空间,这时申请的空间会丢失,这是严重错误
*p=1000;
if(p!=NULL)//p不为空,说明malloc申请成功,p指向申请的空间
printf("%d\n",*p);
//3、释放
if(p!=NULL)
{
free(p);
p=NULL;
}
下一篇: 作业:大数据之Sqoop的使用