硕彦博创学习记录——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;
	}

猜你喜欢

转载自blog.csdn.net/yangwenxiao123456/article/details/81172640