数组的复习

一维数组的创建和初始化

创建
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[2];

注意:[]中在C99之前的必须是常数。不可以设置成变量。
回顾一下数据类型:

char                  //字符数据类型   1个字节(8个位)

short                 //短整型              2
int                     //整形                 4
long                  //长整形              4
long long          //更长的整形       8
float                  //单精度浮点数    4
double              //双精度浮点数    8

char 长度(字节)为1 值域是-128到127或0到255
signed char 长度为1,但是因为有正负之分,所以这个时候的范围就是-128到127之间
unsigned char 长度唯一,都是正数,所以范围在0到255之间。

数组的初始化
int arr1[10] = { 1,2,3 };
int arr2[] = { 1,2,3,4 };
int arr3[5] = { 1,2,3,4,5 };
char arr4[3] = { 'a',98, 'c' };
char arr5[] = { 'a','b','c' };
char arr6[] = "abcdef"    

运行结果:
数组的复习_第1张图片
注:一个字符串的结束的标志是‘\0’,printf()函数对字符串进行输出的时候,遇到’\0’即字符串的结束标志。

一维数组在内存中存储

#include 
int main()
{
    int arr[10] = { 0 };
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
 
    for (i = 0; i < sz; ++i)
    {
        printf("&arr[%d] = %p\n", i, &arr[i]);
    }
    return 0;
    }

运行结果:
数组的复习_第2张图片

二维数组的创建和初始化

创建
//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];
初始化

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略
二维数组的输出
#include 
int main()
{
	int arr[3][4] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

运行结果:
在这里插入图片描述

二维数组的存储

数组的复习_第3张图片
数组的复习_第4张图片

数组作为函数参数

数组名代表什么?

#include 
int main()
{
    int arr[10] = { 1,2,3,4,5 };
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    printf("%d\n", *arr);
    //输出结果
    return 0;
}

运行结果:
数组的复习_第5张图片
所以可见:
数组名是数组首元素的地址。

冒泡排序的设计:


void bubble_sort(int arr[]  , int sz)
{
    int i = 0;
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        for (j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

int main()
{
    int arr[] = { 3,1,7,5,8,9,0,2,4,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);//是否可以正常排序?
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

数组传参的错误设计:

void bubble_sort(int arr[])
{
    int sz = sizeof(arr) / sizeof(arr[0]);//这样对吗?
    int i = 0;
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        for (j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
}

int sz = sizeof(arr) / sizeof(arr[0]);//这样对吗?
这样传参的只是地址,并不是数组本身。

文章来源:
https://blog.csdn.net/m0_58367586/article/details/128287089

你可能感兴趣的:(C语言,linux)