目录
  • 1. 指针类型
  • 2. 野指针
  • 3. 指针的运算
    • 3.1 指针+-整数
    • 3.2指针-指针
    • 3.3 指针的关系运算
  • 4. 指针数组

    1. 指针类型

    指针以字节为单位;

    指针类型决定了解引用时能访问的空间的大小;也决定了指针的步长(指针+1走多远)

    2. 野指针

    • 指针未初始化
    • 指针越界访问
    • 指针指向的空间已释放
    int* test()
    {
    	int a = 10;//野指针
    	return &a;
    }
    int main(){
    	int* p =  test();
    	//test函数里的a是局部变量,出函数时,储存变量的空间已经还给操作系统了
    	printf("%d\n",*p);
    	//此时通过解引用不能再访问到a;
    }

    如何规避野指针呢?

    • 指针初始化
    • 小心指针越界
    • 指针指向空间释放即使置NULL
    • 避免返回局部变量的地址
    • 指针使用之前检查有效性

    3. 指针的运算

    3.1 指针+-整数

    	int arr[5] = {0,1, 2, 3, 4};
    	int* p = arr;
    	int i = 0;
    	for(i=0; i<5; i++)
    	{
    		//printf("%d ",*p);
    		//p++;
    		printf("%d ",*p++);//以上两种写法相同
    	}

    3.2指针-指针

    得到的是中间元素的个数,可以用来求字符串的长度

    int my_strlen(char* arr)
    {
    	char* start = arr;
    	char* end = arr;
    	while(*end != '\0')
    	{
    		end++;
    	}
    	return end - start;
    }

    3.3 指针的关系运算

    其实就是指针比较大小。实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免这样写,因为标准并不保证它可行。

    	float values[5];
    	float *vp;
    	int i = 0;
    	for (vp = &values[0]; vp < &values[5];)
    	{
    		*vp++ = 0; 
    	}

    4. 指针数组

    存放指针的数组

        int a; int b; int c;
    	int* arr[3] = {&a,&b,&c};
    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。