欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

硕彦博创学习记录——2018.7.20 & 2018.7.23(指针)

程序员文章站 2024-02-29 10:46:28
...

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;
	}