C语言指针及其与数组的联系

C语言指针及其与数组的联系
指针的概念
指针变量
指针运算符
指针变量的定义
指向数组元素的指针变量
定义指向数组元素的指针变量
指针运算
访问数组
指针的概念
在间接访问中通过另一变量中存储的地址能找到所需的变量,可以认为该地址指向目标变量,在C语言形象地把地址称为指针。
注意:地址并不是一个简单的数字,它含有存储位置和该位置存储的是哪种类型两个概念。所以在定义指针变量是必须指明它所指向变量的类型。

指针变量
指针运算符
1.地址运算符&:也叫取地址运算符,在C语言中规定,&只能取内存中变量的地址。(单目运算符)
2.取值运算符*: 与指针混合使用,获取指针所指向的变量的值,即可通过指针间接访问变量。(单目运算符)

-*&和&*的区别
&和 * 的优先级相同,按照自右向左的方向结合。
故& * p先进行 * 运算( * p相当于变量a),在进行&运算(&a),最后结果为指针p;相同的思路可知& * p为变量a。

指针变量的定义
定义格式:
基类型名 *指针变量名 =&变量名
int *p;
指针变量分配存储单元,其长度等于存储地址时需要的字节数;
指针变量所指向变量的类型由基类型名确定,指针变量只允许指向基类型的变量。

注意:指针变量的运算顺序。
++*p,p++,(++p),(*p)++四者之间的差别:
++*p 先给p指向的变量加1,然后取其值
(*p)++ 先取p指向的变量值,然后该变量值加1
*p++ 取p所指向变量的值,然后p增1
*++p P先增1,然后取p所指向变量的值
1
2
3
4
5
6
指向数组元素的指针变量
定义指向数组元素的指针变量
对数组而言,数组名就是数组在内存中存放的首地址。
定义指向数组元素的指针变量与指向一般数据的指针相同,只是要求定义中的基类型和数组的类型相同。

int a[10],d[20];//定义数组
int *p,*q=&a[0];//在定义的时候初始化
p=&a[6];//p指向a数组的6号元素
p=d;//p指向d数组的0号元素,即d的起始地址
//数组名即是地址,所以&a[0]与a等价,&d[0]与d等价
1
2
3
4
5
指针运算
当指针变量指向数组元素时,指针变量加(减)一个整数m,表示指针向前(向后)移动m个元素。(不是m个字节)
int c[20];
int p=&c[9];//使得p指向c[9]的地址
p1–;//p减去1,指向了c[8],字节数加4
p1+=3; //p加3,指向c[11],字节数减去12
1
2
3
4
两个同类型的指针可以相减,所得整数为二者之间相差的元素个数。
两个指针之间不能进行加法,减法,除法等算术运算。
两个同类型的指针可以比较运算。
C语言还设置了一个指针常量“NULL”,称为空指针,其可以赋给任何类型的指针。
访问数组
int b[30],p=b;
1
下标法
(1)b[i];
(2)p[i];
b[i]与p[i]是等价的
指针法
(1)
(b+j);
(2)
(p+j);
*(b+j)和 * (p+j)是等价的
以上四种方法都是等价的,但需要注意的是数组名是一个地址常量,不能做加减运算。

#include<stdio.h>
int main()
{
int i=0;
int array[6];
int p=array;
printf("\n Please input array [6]:\n");
while(p<(array +6))
scanf("%d",p++);
printf("\n Output array [i]:\n");
for(i=0;i<6;i++)
printf("%d,", array [i]); //数组名 下标法
printf("\n Output
( array +i):\n");
for(i=0;i<6;i++)
printf("%d,",(array +i)); //数组名 指针法
printf("\n Output p[i]): \n");
p=array; /p指向数组的首地址/
for(i=0;i<6;i++)
printf("%d,",p[i]); /
(3)指针变量,下标法*/
printf("\n Output (p+i):\n");
for(i=0;i<6;i++)
printf("%d,",
(p+i)); /(4)指针变量,指针法料/
printf("\n Output p++: \n");
while(p<( array +6))
printf("%d,",p++);
printf("\n"); /
(5)指针变量,指针法,效率最高
/
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Please input array [6]:
1 2 3 4 5 6

Output array [i]:
1,2,3,4,5,6,
Output*( array +i):
1,2,3,4,5,6,
Output p[i]):
1,2,3,4,5,6,
Output *(p+i):
1,2,3,4,5,6,
Output *p++:
1,2,3,4,5,6,
————————————————
版权声明:本文为CSDN博主「Liquor…」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/The_onion/article/details/121293810

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值