首页 > 编程知识 正文

指针什么什么?,指针什么什么

时间:2023-05-06 12:22:21 阅读:241493 作者:297

概念

指针是C语言中的一种数据类型,T*,用该种类型定义的变量称为指针变量,该变量中存储的是一个地址
注:指针变量中存储的是一个地址,指针就是地址,地址就是指针

分类

指针分为一级指针和多级指针

指针的操作 解引用:返回内存地址中对应的对象。 int a=10; int *p=&a;cout<<*p<<endl;// 输出a的值,就是解引用操作。 指向结构体成员运算符(->):使用一个指向结构体或对象的指针访问其内成员。sizeof(指针):32位系统下占用4字节;64位系统下:vs默认是按照32位方式编译的:4字节,可以对编译器进行设置,让编译器按照64位的方式编译代码:8字节

注意:对指针进行++/-- +/-数字 一般针对的是指针指向一段连续的空间才有意义

int a[]={1,2,3,4,5,6,7,8,9,0};int *pa=a;pa++;//让指针向后偏移一个类型元素的大小pa+3;//注意:pa值没有发生变化,该表达式的结果最后指向5的位置//两个指针相加没有意义,相减是两个指针间相隔元素的个数(可正可负) const修饰指针 const int* p和int const* p:修饰的是*p;表示p指向空间中的内容不能通过该指针来修改int* const p:修饰指针本身,表示指针的值不能修改,即指针不能指向其他位置 指针的应用 数组指针:是一个指针,该指针专门用来指向数组指针数组:是一个数组 int array[5];int (*p1)[5];//数组指针int *p2[5];//指针数组//p1++; //p1需向后偏移5个int类型空间大小//p2++; //编译失败--因为p2是数组的名字 函数指针:是一个指针,用来存放函数的地址 //指针变量:指向有一个int类型返回值,有两个int类型参数的函数指针变量int f(int left,int right){return 0;}int (*pf)(int left,int right);//函数指针变量 指针和数组的区别

数组:什么是数组?
1.概念:相同类型元素的一个集合。注意:底层空间是连续的
2.分类:一维数组和多维数组
3.初始化:
int array[10]={0}
Int array[]={1,2,3};
Int array[5]={1,2,3};
4.特性
int array[10];
数组的类型:int [10]
数组中存储元素的类型:int
数组名不能直接进行++/–
数组名:&array和sizeof(array)此时数组名表示数组本身,其他方式都表示首元素地址
int array[5]={1,2,3,4,5};
array+1-----1元素在数组中的位置
array+0+1----1元素在数组中的位置
&array+1------向后偏移5个元素的位置
&array[0]+1-----1元素在数组中的位置
5.用法—数组传参
通过下标访问数组中的元素—注意:一定不能越界
数组传参:

//有一个f函数,f(array)----数组名传参:变成首元素的地址void sort(int array[],int sizeof){}

二维数组传参:

void f1()(int array[3][4]){}void f2(int (*p)[4],int row){}void f3(int *array,int row,int col){}

6.缺陷
如果向任意位置插入或删除元素则不方便

区别
1.两个不同的对象,但是他们之间有联系
2.数组是用来存放一组数字的,而指针是用来存放地址的
3.数组的大小和元素个数、数组元素类型有关系,而指针的大小(4个字节或者8个字节)和类型无关。

注意事项:
1.一般情况下,当定义了一个指针b变量时,最好让该指针有一个合法的指向,如果没有合法的指向,则应该让指针指向NULL
2.每次使用指针时,最好进行判空
3.避免产生野指针或垂悬指针
野指针:指针指向了一块非法的内存空间,比如指针指向的堆空间已经被释放了,但是用户还在通过该指针访问该空间中的元素

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。