数组学习笔记,数组名+1 和&数组名+1 的区别

本文详细介绍了数组的基础概念,包括数组的类型定义、初始化方法、内存分配方式及数组名的特性。通过具体示例,解释了数组名代表的含义、数组的大小计算以及数组名在指针运算中的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

数组

2018/3/22  7:00

类型   数组名[ ]   //方括号里的数必须是整形,常量

1.    下标从0开始

2.    数组如何初始化?

A:  int a[10]={ }   //大括号里不写值初始化值为0;不写,初始化为随机数

Int  b[] = {1,2,3,4,5,6,7,}

编译,链接,执行(编译时得到数组大小)

X = sizeof(b)     :结果:28

数组空间大小的算法:sizeof(b)/sizeof(b[0])   与数组元素个数是有一定区别的,谨记

结论:1.数组名不代表地址,代表首元素的地址

           2.数组名代表整个数组的大小(在sizeof中)

3.    编译和执行有什么差别?

4.    数组的访问?

5.    数组名++?数组名+1?

不允许做++等赋值工作,数组大小的固定的,数组名代表首元素地址,是常量值,自身不可以被改变

数组名+1是可以的,因为没有改变数组,自加改变了数组。

  • 下面有一段代码,大家可以不运行,看看应该输出什么?很有意思

#include <stdio.h>
#include <string.h>
int main() {
       int a[5]={1,2,3,4,5};
    int *p=a;

    printf("p = %p\n",p);
    int *ptr = (int *)(&a+1);

    printf("&a=%p   &(a[4])=%p \n",&a ,&(a[4]));


    printf("ptr=%p\n",ptr);
    printf("ptr-1=%p\n",ptr-1);



    printf("%d   %d\n",*(a+1),*(ptr-1));

    printf("sizeof(ptr-1) = %d\n",sizeof(ptr-1));

    return 0;
}

关键在于  a+1   和&a+1  加1到底加了多少,加的是什么?

a+1:数组元素的移动:首地址 + 一个数组元素的大小 

&a+1: 其实加的整个数组大小:首地址 + 数组长度*数组元素大小 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值