c语言学习---数组

一.一维数组

1.定义

  1. 定义
    在这里插入图片描述
  • float a[0];//数组大小为0没有意义,不能这样
  • int k=3,a[k]; //不能用变量说明数组大小

2. 数组在内存中的存储

在这里插入图片描述

  1. 初始化
  • int a[10]={0}; //后面全是0
  • int a[10]={1,2,3}; //后面全0
  • int a[]={1,2,3,4,5};//相当于a[5]
    在这里插入图片描述
  1. 一维数组的存储及函数传递
  • 数组值地址按从小到大
  • 变量定义先放在高地址,然后才低地址
  • 除了for循环,没有其他办法能将数组里的元素一次性全部打印出来
  • 一维数组传给子函数时,子函数并不知道有多少元素
#include<stdio.h>
#include<stdlib.h>
#define N 10
void print(int a[],int len)//a是指针类型
{
    
    
	int i;
	for(i=0;i<len;i++)
	{
    
    
		printf("%3d",a[i]);
	}	
	a[4]=20;
	printf("\n");
}
int main()
{
    
    
	int i=10;
	int arr[N]={
    
    1,2,3,4,5};//从arr[0]到arr[4]
	print(arr,N);//arr是数组首地址,N是数组长度
 	printf("%d=arr[4]",arr[4]);
	system("pause");
}

3.栈空间和数组

  • windows操作系统中单个函数的栈空间大小是1MB,Linux是10MB
  • 爆栈—数组过大 , 递归
  • 工作时不建议用递归

二.二维数组

1.初始化

  • a[3][4],3行4列
int a[][4]={
    
    1,3,5,7,8,11,13,15,17,19,21,23};
int a[3][4]={
    
    {
    
    1,3,5,7},{
    
    8,11,13,15},{
    
    17,19,21,23}};
int a[3][4]={
    
    {
    
    3},{
    
    5}};//没有就补0

在这里插入图片描述

2.二维数组的传递

#include<stdio.h>
#include<stdlib.h>

void print(int a[][4],int row)   //这个列数一定要写,行单传
{
    
    
	int i,j;
	for(i=0;i<row;i++)//一共几行,这里是3行
	{
    
    
		for(j=0;j<sizeof(a[0])/sizeof(int);j++)//一排的个数a[0]  
		//这里是列a[0]有四个元素
		{
    
    
			printf("%3d",a[i][j]);
		}
		printf("\n");
	}
	a[2][3]=50;
}

int main()
{
    
    
	int a[][4]={
    
    1,3,5,7,8,11,13,15,17,19,21,23};
	print(a,3);
	printf("a[2][3]=%d\n",a[2][3]);
	system("pause");
}
  • arr是指针,arr[0]是一维数组.arr[][3]中的3非常重要,3列,一定要写
  • 传入的是4行
    在这里插入图片描述
  • 传入的是3行
    在这里插入图片描述
    在这里插入图片描述
  • 一维数组数组名存到是整型指针,2维数组数组名存到是数组指针

三.字符数组

  • while读取也可以,读一个打一个
    在这里插入图片描述

在这里插入图片描述

  • 不需要加flfush(stdin).输入和输出缓冲区,输了hellow,第一次读取h,并打印了,然后本该又到e了,但是这是缓冲区全部清除了,下面都没 了
    在这里插入图片描述
    在这里插入图片描述

1.初始化

  • char c[10]={‘1’,‘2’,‘3’,‘4’,‘5’};//单引号是字符,后面默认跟一个结束符’\0’.不要用这种,太low了
  • printf("%s\n",c);//c是字符数组数组名,也只能放字符数组数组名,遇到结束符就不打了
  • 打印出烫烫烫烫,说明没控制好结束符
    在这里插入图片描述
  • char c[10]=“12345”
    在这里插入图片描述
  • c[i]!=0;或c[i]!=’\0’都可以
  • 初始化字符数组时要赋初值0,不然打印都是烫烫烫…
    在这里插入图片描述
    在这里插入图片描述
  • 遇到结束符会停止.
  • scanf函数字在读取字符串时遇到空格就认为读取介结束在这里插入图片描述
  • 非要读多个字符串,%s会忽略空格
    在这里插入图片描述

2.gets与puts

  • NULL 就是0,防止编译警告
  • gets()的返回值时读入的字符串
  • gets()会读取空格,但遇到\n不会存储,而是把它翻译成’\0’,即结束
  • puts(arr)=printf("%s\n",arr);
  • puts默认加一个换行

3.接口

  1. str系列接口
  2. strn系列
  3. mem系列

猜你喜欢

转载自blog.csdn.net/weixin_43722052/article/details/114382011