C语言学习与总结---第八章:指针[02]

指针[02]8.4 指针与数组8.4.1 指向数组元素的指针8.4.2 指针的算术运算8.4.3 通过指针访问数组元素8.4.5 数组名作为函数参数8.4 指针与数组8.4.1 指向数组元素的指针int a[10]; //a为包含10个整型数据的数组 int* p; //p为指向整型变量的指针变量 p = &a[0]; /*把a[0]元素的地址赋给指针变量p, 即让p指向a数组的第0号元素等价于p=a;*/ /*也可以写作: int
摘要由CSDN通过智能技术生成

8.4 指针与数组

8.4.1 指向数组元素的指针

int a[10];  //a为包含10个整型数据的数组  
int* p;     //p为指向整型变量的指针变量  
p = &a[0];  /*把a[0]元素的地址赋给指针变量p, 
             即让p指向a数组的第0号元素等价于p=a;*/  
/*也可以写作: 
    int* p = &a[0]; or 
    int* p = a;*/ 
 *p = 5;  //通过p访问a[0],将数值5存入a[0]

8.4.2 指针的算术运算

指针的算术运算有且仅有三种:
指针加上整数、指针减去整数、两个指针相减

(1)指针加上整数

int a[10], * p, * q, i;  
p = &a[2];  //p指向了a[2]  
q = p + 2;  //q指向了a[4]  
p += 3;     //p指向了a[5]

(2)指针减去整数

int a[10], * p, * q, i;  
p = &a[8];  //p指向了a[8]  
q = p - 2;  //q指向了a[6]  
p -= 3;     //p指向了a[5]  

(3)两个指针相减

int a[10], * p, * q, i, j;  
p = &a[5];  //p指向了a[5]  
q = &a[1];  //q指向了a[1]  
i = p - q;     //i=4  
j = q - p;     //j=-4  


如果p的初值为&a[0],则:

(1) p+i和a+i是a[i]的地址,即它们指向a[i]
(2) * (p+i )和 * (a+i)就是a[i]
(3) p[i]与*(p+i)等价
(4)指针可以用关系运算符和判等运算符进行比较:< <= >= >;== !=
比较的结果依赖于指针指向的元素的相对位置,例如

int a[10], * p, * q, i, j;  
p = &a[5];  //p指向了a[5]  
q = &a[1];  //q指向了a[1]  
p <= q;     //值为0  
p > q;     //值为1  

(5)指针的算术运算只有当指针指向数据元素时,才有意义,对未指向数组元素的指针执行算术运算、或者对两个并非指向同一数组的指针做减法、做比较,都将导致未定义行为!

8.4.3 通过指针访问数组元素

访问数组元素通常有两种方法:
(1)下标法:a[2];
(2)指针法:

*(a+2)或*(p+2)

例如,输出数组中的全部元素。其中整型数组a有10个元素,输出各元素的方法有三种:
(1)下标法

#include<stdio.h>  
int main()  
{
     
    int a[10], i;  
    for (i = 0; i < 10; i++)  
        scanf("%d", &a[i]);  
    for (i = 0; i < 10; i++)   
        printf("%d\n", a[i]);  
    return 0;  
} 

(2)通过数组名计算数组元素地址

#include<stdio.h>  
int main()  
{
     
    int a[10], i;  
    for (i = 0; i < 10; i++)  
        scanf("%d", &a[i]);  
    for (i = 0; i < 10; i++)  
        printf("%d  ", *(a+i));  
    return 0;  
}

上述代码第8行也可以改为

printf("%d  ", *(p+i));

(3)用指针变量指向数组元素

#include <stdio.h>  
int  main()  
{
     
    int a[10], i, * p;  
    for (i = 0; i < 10; i++)  
        scanf("%d", &a[i]);  
    for (p = a;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值