关于指针的零碎知识and数组

指针

1、指针是什么?

int *p;              int a;
声明语句;           类型  变量;
 int *p   p是一个指针变量    指针是一个变量(特殊的变量:存地址的变量)  指针变量占用4个字节

这里写图片描述

数组

1、数组声明时,编译器要根据[ ]里面的数据去分配空间 int a[ ]; // 错误
2、[ ]里面是一个整数常量表达式
整型常量表达式: 1、表达式的值为整型 int (7.4 -3.4)
2、表达式中不能包含变量

3、int是元素的类型,而int[10]是数组类型 数组的声明需要什么?1.数据的个数 2.数据的类型 3.写法
int a;
a : 变量名
int : 变量的类型

4、对比

int a[10];
a 数组名
10 元素的数目,表示数组有 10 个元素
int 元素的类型,表示每个元素都是 int 类型数据

int a;
a : 变量名
int : 变量的类型

int *p;

p : 变量名
int * : 变量的类型

int a[10];

a: 变量名
int [10]: 变量的类型 (数组类型)

小结:在变量的声明语句中,除了变量名以外的,就是该变量的类型
在数组的声明中,除了 数组名[] 以外的,就是该数组的元素类型
练习: int a[3][4];
a 数组名
int [3][4] 数组的类型

使用类型去定义变量,那么分配的空间是连续的 数组的空间是连续的

5、数组的初始化
int a = 10;
思考:数组的初始化需要什么??
1.写多少个数据
2.数据区分
3.整体形式
数组的初始化,整体使用 {} 列表形式,每个数据使用 , 间隔
初始化列表中的数据个数 应该与 数组元素数目相同
int a[5] = {12, 34, 56, 78, 90};

①如果初始化列表中数据个数 小于 数组元素数目
int a[5] = {12, 34, 56};
概念:数组的部分初始化,未被赋值的元素会被置 0
理解:数组的初始化,首先将空间所有位清 0
char a[5] = {'h', 'l', 'l', 'u'};
字符数组部分初始化,会被置 '\0', 本质还是 0

0    '0'    '\0'    
0   : 整型数据 0
'0' : 字符0      --- 48
'\0'    : 结束符      --- 0

②如果初始化列表中数据个数 大于 数组元素数目
int a[5] = {12, 34, 44, 8, 11, 23};     
编译报错
数组的初始化还可以使用空的方括号 [],编译器会根据初始化列表中数据的个数
去分配空间
int a[] = {12, 33, 445, 56};//注意单单声明的时候不能写成这样int a[];

6、数组下标
int a[5] = {12, 34, 55, 68, 22};
int b[8];
int i;

for(i = 0; i < 5; i++)
{
    printf("%d  ", a[i]);   // a[0] a[1] a[2] a[3] a[4]
}

如何访问数组的元素??

通过下标        (索引)

a[0]    :  0 : 下标   表示数组a的第 1 个元素

a[3]    :       表示数组a的第 4 个元素

理解:下标表示法,当做元素的变量名

a[0]    : 数组a的首元素的数值
&a[0]   : 数组a的首元素的首地址

下标是从 0 开始计数的


int a[5];   元素数目,表示数组有 5 个元素

a[2]        下标 / 索引 
        表示数组的第 3 个元素

a[0]        表示数组的第 1 个元素

概念:  声明 和 初始化时,编译器需要根据方括号中数据去分配空间,因此此时,方括号中的数据表示数组元素的数目;
        其余情况,均表示数组下标,这样我们可以去访问对应数组元素

    int a[10];

    a[6] = 10;  // 将数据 10 赋给数组a的第 7 个元素

a[n]    表示数组的第 n+1 个元素

7、数组边界

使用下标,不要超过数组边界
int a[4] = {12, 45, 67, 78}; // 4 : 元素数目
printf(“a[4] = %d\n”, a[4]); // 4 :数组下标,数组的第5个元素
注意:
数组的下标是从 0 开始计数的
使用下标,不要超过数组的边界
8、指定数组大小

int a[10];

int a[];

1.数组定义时,[ ]里必须有数据

2.[ ] 里可以是一个整型常量表达式

3.表达式的值必须大于 0
整型常量表达式:
        1.表达式里不能有变量 
        2.表达式的值为整型

理解:因为[]里面是表示元素的个数,必须为整型,必须大于 0

练习: 下面数组的声明,哪些是正确的????

    int  n = 4;

    1) int a[];             // 错    
    2) int a[5-3.5];        // 错    
    3) int a{2};            // 错    
    4) int a[3*4-4];        // 对    
    5) int a[n-n+5];        // 错    
    6) int a[(int)4.56];    // 对    
    7) int a[5-6];          // 错     
    8) int a[2*3-6];        // 错     
    9) int a[6.5+2.3-3.8];  // 错  
//1.用户输入年月日,求该天是这一年的第多少天??
//  如: 1998/3/4    是该年的第 63#include <stdio.h>
int main()
{
   int month[12] = {31,28,30,31,30,31,30,31,30,31,30,31};
   int y = 0,m = 0,d = 0,days = 0,i = 0,sum = 0;
   printf("请输入你要计算的年月日:");
   scanf("%d %d %d",&y,&m,&d);
   if(((y % 100 != 0)&&(y % 4 == 0))||((y % 400) ==0) )
   {
     month[2] = 29;
   }
   for(i = 0;i < m-1;i++)
   {
     sum += month[i];
   }
   days = sum + d;
   printf("是该年的%d天\n",days);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值