数组的认识

一,数组

1,数组的定义

   #define MAX_SIZE 1000

   int a[MAX_SIZE];

   int a[MAX_SIZE][MAX_SIZE];可以省略行,但是不可以省略列

使用宏定义来确定数组的大小,易于移植

int a[]={1.2.3};此时数组的大小是sizeof(a) = 12;

 

2,将数组初始化为0

       a[MAX_SIZE] = 0;

      a[MAX_SIZE] [MAX_SIZE]= 0;

或者memeset(a,o,MAX_SIZE);

注:void *memset(void *s, int ch, size_t n);将s中前n个字节用ch 代替。

 

3,如何输入输出一维数组

   一维整型数组输入

     int a[MAX_SIZE];

     int *p = a;          (*p = &a[0])

for(i = 0; i < MAX_SIZE;i++)

{

        // scanf("%d",&a[i]);

        //scanf("%d",a + i);

        //scanf("%d",p++);

       // scanf("%d",p + i);

       // scanf("%d",&p[i]);

}

注意:这样写是错的,scanf("%d",a++);因为数组名是常量,表示数组首元素的地址,常量是不可以修改的。

一维整型数组的输出

for(i = 0; i < MAX_SIZE;i++)

{

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

    //printf("%d",p[i]);

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

    //printf("%d",a[i]);

    //printf("%d",*(a+i));

}

 

一维字符型数组输入

char str[MAX_SIZE];

scanf("%s",str):用scanf输入字符时,不能输入空格,如果输入空格,那么会自动跳出scanf这个函数,停止输入内容

gets(str):使用这个函数要加上头文件#include<string.h>

getchar():这个函数每次只能输入一个字符,所以可以用循环输入

for(i = 0 ; i < MAX_SIZE;i++)

{

    getchar();

}

 

一维字符型数组输出

printf("%s",str):

puts(str);

 

4,关于一维数组和指针

举例:

打印结果相同

因为两者都表示数组的首元素地址

如果各自加1 。结果就不一样了

&a:数组地址,用首元素的地址表示,代表整个整个数组在内存中的位置,所以&a+1,就是在首地址上加sizeof(a);

    a是数组名,数组名表示的是指针常量,存放的是数组首元素的地址,因为是常量不可以对其进行修改,例如scanf("%d",a++);

对一维数组的数组名取地址 = 数组的地址

 

对一维数组的地址取值 = 数组元素的首地址    (*(&a) = a)

 

 

二维整型数组的输入和输出

int a[][2] = {1,2,3,4};

for(i = 0,i < 2; i++)

{

    for(j = 0; j < 2;j++)

{

        //scanf("%d",&a[i][j]);

        //scanf("%d",*(a+i)+j);

}

 

 

 

for(i = 0,i < 2; i++)

{

    for(j = 0; j < 2;j++)

{

        //printf("%d",a[i][j]);

        //printf("%d",*(*(a+i)+j));

}

 

二维字符数组

输入

char *ptr[3][100];     //定义一个数组指针

char src[3][100];

for(i = 0; i < 3;i++)

{

     //scanf("%s",src[i]);

     //scanf("%s",*(src+i));

     //scanf("%s",*ptr[i]);

}

输出

for(i = 0; i < 3;i++)

{

       //printf("%s\n",src[i]);

       //printf("%s\n",*(src+i));

       //printf("%s\n",*ptr[i]);

}

 

 

 

 

 

 

 

 

 

 

*(*(a+ i)+ j)

a+i:第i+1个一维数组的地址

*(a+i):第i+1个一维数组首元素的地址

*(a+i)+j:第i + 1个一维数组中的第j+1个元素的地址

*(*(a+ i)+ j):第i + 1个一维数组中的第j+1个元素的地址所指向的内存单元的值。

在输出和输入函数,可以用以上的一些指针表示地址

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值