指针的详细讲解

指针的详细讲解

指针的定义:

指针是什么?指针从根本上来看是一个值为内存地址的变量或者数据对象。指针变量的值是地址。例如一个指针的变量名为p,那么我们可以通过 p = &a;将a的地址赋值给p,从而我们可以通过对p进行操作,对a进行修改等操作。

要创建指针变量,首先要先声明指针变量的类型。例如:

int *a;//指针的类型是int *,指针所指向的是int类型的.
char *b;//指针的类型是char *,指针所指向的是char类型的.
double *c;//指针的类型是double *,指针所指向的是double类型的.
int **ptr;//指针的类型是int **,指针所指向的是int*类型的.

说到指针就离不开*运算符跟&运算符

  • *运算符,叫做间接运算符,也叫做解引用运算符,用来找出存储在地址的值。*运算符后面跟着一个指针名或者地址时,*给出存储在指针所指向地址的值。

val = *ptr; //val的值为ptr相应地址上的值。
a = &b;
c = *a;
等同于c = b;

  • &运算符,叫做地址运算符。后跟变量名时,&给出该变量的地址。

例如:
*veteran 为取veteran变量的地址。

指针的声明:

int *pi;
char *pc;
double *pd;

  • 类型说明符表明了指针所指向对象的类型。星号表明了我们声明的变量是一个指针。例如int *pi;声明了一个指向int类型的指针。*与指针名之间的空格可有可无,通常在声明时使用空格,在解引用时省略空格。

指针在函数上的应用

  • 在这里举一个简单的例子,两数交换。
void Exchange(int *x,int *y)//传入的参数应该为地址
{
	int t;
	t = *x;//t获得x地址上的值,即x的值。
	*x = *y;
	*y = t;
}
void Exchange(int x,int y)//传入的参数应该为值
{
	int t;
	t = x;//t获得x地址上的值,即x的值。
	x = y;
	y = t;
}

相较于上面两种交换数的函数Exchange,我们发现通过指针的形式能够帮助我们利用参数的地址对地址上的值进行修改,而对于一般的函数参数,作用域仅仅只有在函数当中,无法对参数的值进行修改。

指针跟数组的关系

int a[10];
在数组中我们在声明数组的时候一般会直接给他一个固定的大小,那么所声明的数组名其实对应的时数组的首地址即a[0]的地址。
int* b;
b = a;
我们可以通过b+n的形式去访问a数组,例如啊a[2] ==(b+2);而b + 2指的是a[0]+2;
当一维数组作为形参时,我们一般可以 使用 (数据类型)[] 参数名 或者(数据类型)* 参数名的形式进行传参。

指针的高级使用

  • int* _ptr: 整形指针
  • int _ptr[5]:整型数组
  • int* _ptr[5]:指针数组,每个元素都为整形指针
  • int (*_ptr)[5]:一个指针指向数组
  • int* (_ptr[5]):一个指针数组
  • 11
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值