ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

记录指针初级

2021-11-27 23:02:46  阅读:77  来源: 互联网

标签:arr 字节 指向 记录 int 初级 数组 指针


初级指针

1.int* p=&a//p就是一个指针变量

指针就是一个变量,是用来存放地址的变量(存放在指针中的值都被当作地址来使用)。

2.指针的大小,在32位平台上是4个字节,在64位平台上是8个字节。

3.指针类型的意义

①决定了指针进行解引用的时候能够访问空间的大小

例如:int* p; //表示*p能够访问四个字节。

          char* p//表示能够访问一个字节。

           double* p//能够访问八个字节。

②在指针+数字中的情况不同

  指针类型决定了指针走一步能够走过多少空间(步长)。

例如:int* p; p+1表示走过了四个字节,以此类推。

4.野指针

1)什么是野指针?

访问一个已销毁或者访问受限的内存区域的指针,不能根据其是否为NULL来判断其一个指针是不是野指针。

2)野指针产生的原因

①指针不初始化

②指针越界访问:如在数组中访问超过数组大小的空间

③指针指向空间释放:调用函数时进入函数,局部变量建立,退出所调用的函数,在改函数范围内的局部变量销毁,所申请的空间还给系统,这就使得主函数指向该空间的指针变成了野指针。

3)如何规避野指针

①初始化指针

②小心指针越界

③指针指向空间释放后即将其置为NULL

④指针使用前检查其有效性

5.指针+/-整数

即指针越过或回退多少个指针类型的空间

6.指针 - 指针:得到的是中间元素的个数

应用,用指针求字符串长度

int my_strlen(char *c)
{
	char* p = c;
	while (*p != '\0')
	{
		p++;
	}
	return p - c;
}

规定表明:允许指向数组元素的指针可以与指向数组最后一个元素的后面的那一个内存位置的指针进行比较,而不可以与指向第一个元素之前的那个内存位置的指针进行比较。

7.指针和数组

1)数组名是首元素的地址。

两个例外情况

int arr[] = {0};

int*  p= arr;

①&arr-&数组名-数组名表示整个数组的地址。

②在使用sizeof(arr)+1的时候,跳过的空间为整个数组的存储空间。

2)指针与数组的联系

p+i == &arr[i];//p指向的是第一个元素的地址,+i表示跳过了i个元素数组类型所占的空间。

*(p+i)== arr[i];//不难理解对p+i进行解引用就是数组arr[i]的元素值。

8.二级指针

int a =10;

int* pa = &a;

int** ppa = &p;

ppa就是一个二级指针变量,他指向的是一级指针pa所在的地址。

**ppa == *pa == a。

标签:arr,字节,指向,记录,int,初级,数组,指针
来源: https://blog.csdn.net/m0_57198828/article/details/121581860

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有