C语言指针(一)

###引入

程序中的每个变量都在内存中占用有1个或多个连续的存储单元,我们把连续的存储单元中的第一个存储单元的地址称为变量的地址,计算机通过地址访问存储单元,那么,如何存储内存地址呢? 显然,地址是以整数的形式表示的,但是,由于存储容量的限制,不同的存储器其地址范围可能不同,不同整型数据其取值范围也不相同,所以地址的取值范围可能不同于整数的取值范围,即不能用整型变量存储内存地址。为了解决这一问题,C语言引入“指针”的概念,用以存储内存的地址,可以说,指针就是地址,指针变量就是存储地址的变量。引入指针的目的是为了通过指针访问其他数据对象,已定义的指针变量与另一个变量建立联系称为指向,指向的实质就是把一个数据对象的地址赋值给一个指针变量

##定义

**数据类型 指针变量1,指针变量2,·····;

说明:
(1)一条定义语句可以定义一个或多个指针变量。
(2)星号(*)表示其后的变量是一个指针变量。
(3)“数据类型”称为指针变量的基类型,即指针所指向的基本变量的数据类型。
(4)指针变量可以和其他变量一起出现在同一个说明语句中。

##与指针有关的运算

  • 取地址和取内容运算
    (1)&:取地址运算符,运算对象是变量,得到变量在存储器中的首地址。
    (2)*:取内容运算符。运算对象是指针,得到指针所指向的变量的值。

int a=3,b,*p;
p=&a;
b=*p;
 /* *p和a都引用a的内容,p和&a都引用a的地址 */

  • **指针的赋值运算 **
    C语言允许指针变量存储任一变量的地址,但要注意变量的类型。
    若有如下定义:

    int i,j,arr[5];
    int *p,*p1=&i;

若要将j的地址赋值给指针变量p,

p=&j;

若要将数组arr的起始地址赋值给指针变量p,

p=arr;  /*或p=&arr[0]; 数组名就是元素arr[0]的地址*/

若要将数组arr的某个元素的地址赋值给指针变量p,

p=&arr[3];

也可以将一个指针变量的值赋值给另一个指针变量,此时,两个指针指向同一个变量:

p=p1;

注意:不能用一个常量(除0外)或一个非地址表达式来给指针表达式给指针变量赋值。

  • 指针的算术运算
    指针变量指向数组的元素时,允许指针变量进行下面的算术运算:
    (1)++(自增)、–(自减)。
    (2)加、减整型数据。
    (3)两个指针相减。
    (4)比较运算
    指针变量加、减整型数据实质上是一种地址运算。例如:

    int a[6]={0,1,2,3,4,5};
    int *p;
    p=a;       /*指针变量p指向数组的第一个元素a[0],*p的值是0 */
    p++;       /*指针变量加1,指针指向数组的元素a[1],*p的值是1 */
    p+=3;       /*指针变量加3,指向数组的元素a[4],*p的值是4 */
    p–;       /*指针变量减1,指向数组的元素a[3],*p的值是3 */

    假设p、q指向同一个数组的两个指针变量,p1指向的数组元素在p2指向的数组元素之前,则表达式 p< q 的值为1(真),否则为0(假)。
    注意:(1)不同类型的指针,移动的字节数是不同的,char型移动一个元素的实际距离为1字节,int型为2字节,float型为4字节,double型为8字节。
    (2)两个指针只有在一定的条件下才可以做减法运算和比较运算,这个条件就是:这两个指针变量指向同一个数组中的元素,当两个指针变量指向同一个数组时,它们的差值即为两个指针变量相对移动的元素的个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值