您的位置:首页 > 其它

数组的认识

2016-07-18 17:16 183 查看
一,数组

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个元素的地址所指向的内存单元的值。

在输出和输入函数,可以用以上的一些指针表示地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: