Please enable JavaScript.
Coggle requires JavaScript to display documents.
指针 (指针和数组, 指针变量, 概念, 野指针) - Coggle Diagram
指针
指针和数组
使用指针获得数组元素的值
dates + 2 == &dates [ 2 ]相同的地址
*(dates + 2) == dates [ 2 ]
++ref
表示的自增会赋值并修改ref的值
ref+1
表示将ref指向的元素的地址之后一个元素地址
实际应用
数组名是该元素的首地址
flizny == &flizny [ 0 ]
除去以下两种情况外
sizeof(数组名),计算整个数组的大小,
sizeof内部单独放一个数组名,数组名表示整个数组
&数组名,取出的是数组的地址
。&数组名,数组名表示整个数组
指针+1表示增加一个所指向类型的大小(以字节为单位)
数组+1以为着下一个元素的地址
数组指针
概念
指向数组的指针
例如:int (*p)[ 10 ] = &arr
代表指针p指向一个拥有十个整型元素的arr数组
一维数组和指针的实际应用
假设p是一个指向拥有十个整形元素的arr数组的指针,则以下代码全部等价
printf( “ % d ” , *( p+i ) );
printf( “ % d ” , *( arr + i ) );
printf( “ % d ” , p [ i] );
printf( “ % d ” , arr[ i ] );
二维数组和指针的实际应用
假设p是一个指向拥有十个整形元素的arr二维数组的指针,则以下代码全部等价
printf(“ %d ”,
(
(p+ i )+ j );
printf(“ %d ”,( *(p+ i )) [ j ];
printf(“ %d ”,*( p[ i ]+ j );
printf(“ %d ”,p[ i ][ j ]);
指针变量
赋值
赋予另一个指针变量的值
int * q ;
q = p ;
赋予空值
特点:使指针变量有一个实际的地址值的同时不指向任何变量,可以用来为指针变量赋初值。
p = NULL ;
赋予另一个普通变量的地址
int a = 39 , * p ;
p = & a ;
定义同时赋值
float b = 3;
float *p = & b ;
概念
指针就是变量,用来存放地址的变量(存放在指针中的值都被当做地址处理)
在32位机中指针变量的大小是4字节,在64位机中指针变量的大小是8字节
实际应用
int*p; //这里的*是指针类型符,说明p是一个指针变量,它可以指向int数据,指针指向的类型必须与变量的类型一致
p=&x;
*p=5; //这里的*是指针运算符,表示将5存入指针变量p所指向的变量x
printf(“%d\n”,x); //输出的结果为5
int x=3;
指针变量的引用
p = & i ;
j = * p ;
int i = 2,j ,*p ;
* p = 6 ;
定义
语法:数据类型 *变量名;
数据类型是指指针变量所指向的变量的数据类型
如:float *p1;p1必须指向实型变量
概念
指针即是地址,指针运算通过地址来访问对应存储单元的数据
野指针
概念
当指针没有初始化或者指针指向的范围越界是,这个指针就变成了野指针