数组的认识
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个元素的地址所指向的内存单元的值。
在输出和输入函数,可以用以上的一些指针表示地址
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个元素的地址所指向的内存单元的值。
在输出和输入函数,可以用以上的一些指针表示地址
相关文章推荐
- JS判断是否在微信浏览器打开
- 最大子序列
- markov 模型
- adb修改华为盒子的 value 和 name
- .NET程序员走向高端必读书单汇总
- LNA
- python魔法方法-单目运算及一般算数运算
- 表的查询(二)
- 28.View the Exhibit and examine the undo tablespace attributes. Your database instance is experien
- PagerAdapter总结
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
- C++ 程序延时处理的几种方法
- hihocoder-#1338 : A Game
- html5shiv
- 关于开发板不能ping通外网IP
- mtk 耳机accdet检测驱动分析
- Android开发中Handler的经典总结
- 《Linux学习》之网络环境的配置
- Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
- 源码安装mysql