C语言自学笔记12----C语言指针与数组

C 语言指针和数组
数组和指针之间的关系
数组是一个顺序数据块。让我们编写一个程序来打印数组元素的地址。
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf(“&x[%d] = %p\n”, i, &x[i]);
}
printf(“x数组的地址: %p”, x);//x表数组首地址,因为数组是顺序连贯的。

return 0;
}
输出结果

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
x数组的地址: 1450734448
数组x的两个连续元素之间相差4个字节。 这是因为int的大小为4个字节(在我们的编译器中)。

请注意,地址&x[0]和x是一样的。这是因为变量名x指向数组的第一个元素。

数组和指针之间的关系

从上面的示例中可以明显看出,&x[0]它等效于x。并且,x[0]等效于*x。

同样,

&x[1]等同于x+1 和 x[1]等同于(x+1)。
&x[2]等同于x+2 和 x[2]等同于
(x+2)。**

基本上&x[i]等同于x+i 和 x[i]等同于(x+i)。*

示例1:指针和数组
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf(“输入6个数字: “);
for(i = 0; i < 6; ++i) {
// 等效于scanf(”%d”, &x[i]);
scanf(“%d”, x+i);
// 等同于 sum += x[i]
sum += *(x+i);
}
printf(“总和 = %d”, sum);
return 0;
}
运行该程序时,输出为:

输入6个数字: 2
3
4
4
12
4
总和 = 29
在这里,我们声明了一个包含6个元素的数组x。为了访问数组的元素,我们使用了指针。

在大多数情况下,数组名称会衰减为指针。简而言之,数组名称将转换为指针。这就是为什么您可以使用指针访问数组元素的原因。但是,您应该记住**,指针和数组并不相同。**

在某些情况下,数组名称不会衰减到指针。

示例2:数组和指针
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;

//ptr被分配了第三个元素的地址
ptr = &x[2];

printf(“*ptr = %d \n”, ptr); // 3
printf("
(ptr+1) = %d \n", (ptr+1)); // 4
printf("
(ptr-1) = %d", *(ptr-1)); // 2

return 0;
}
运行该程序时,输出为:

*ptr = 3
*(ptr+1) = 4
(ptr-1) = 2
在此示例中,第三个元素的地址&x [2]被分配给ptr指针。 因此,当我们打印
ptr时显示3。

并且,输出*(ptr+1)得到第四个元素。类似地,输出*(tr-1)将得到第二个元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值