C语言升级历程——数组和字符串

1、概述

数组是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的

2、一维数组
定义和使用
  • 数组名字符合标识符的书写规定(数字、字母、下划线)
  • 数组名不能与其他变量名相同,同一作用域内是唯一的
  • 定义数组时 [ ]内最好是常量,使用数组时[ ]内既可以是常量,也可以是变量
  • 方括号 [ ] 中的常量表达式表示数组元素的个数

例如:int a[3];  表示数组a有三个元素,

          其下标从0开始计算,因此3个元素分别为a[]、a[1]、a[2]

初始化

在定义数组的同时进行赋值叫做初始化

全局数组若不初始化,编译器将会默认赋值为0

局部数组若不初始化,内容是随机值

int a[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个数组a,同时初始化所有的成员变量
int a[10] = {1,2,3};//定义一个数组a,初始化前面三个成员变量,后面其他的变量为0
int a[10] = {0};//定义一个数组a,所有的成员变量都为0
// []中不定义元素个数,定义时必须初始化
int a[] = {1,2,3,4,5};//定义了一个数组a,里面包含5个成员变量
数组名

数组名是一个地址的常量,代表着数组中的第一个元素的地址

例如有一个数组a[10];其中a == &a[0]表达式为true

#include <stdio.h>

int main()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//定义一个数组,同时初始化所有成员变量

	printf("a = %p\n", a);
	printf("&a[0] = %p\n", &a[0]);

	int n = sizeof(a); //数组占用内存的大小,10个int类型,10 * 4  = 40
	int n0 = sizeof(a[0]);//数组第0个元素占用内存大小,第0个元素为int,4

	int i = 0;
	for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

	return 0;
}
3、一维数组练习强化
求一维数组的最值

定义一个一维数组,将他的最大值/最小值找到并输出

#include <stdio.h>


int main(){

    int a[] = {10,5,45,36,2,7,8,95,9,-10};//定义一个一维数组,并同时初始化它所有的成员变量

    int i = 0;
    int max = a[0];
    
    //sizeof(a),求出整个数组在内存中所占空间字节的大小
    //sizeof(a[0]),求出一个元素在内存中所占空间字节的大小
    //sizeof(a) / sizeof(a[0]),就可以求出数组的元素个数
    for (i = 1;i < sizeof(a) / sizeof(a[0]);i++){
        if (a[i] > max){
            max = a[i];
        }
    }
    printf("数组中的最大值为:%d\n",max);
    
    return 0;

}
一维数组的逆置

方法一:

#include <stdio.h>

int main() {

	int a[] = { 1,2,3,4,5,6,7,8,9,10,11};//定义一个数组a,并初始化它所有的元素

	int i = 0;
	int temp;

	for (i = 0; i < sizeof(a) / sizeof(a[0]) / 2; i++) {
		temp = a[i];
		a[i] = a[sizeof(a) / sizeof(a[0]) - 1 - i];
		a[sizeof(a) / sizeof(a[0]) - 1 - i] = temp;
	}

	for (int j = 0; j < sizeof(a) / sizeof(a[0]); j++) {
		printf("%d\t", a[j]);
	}


	return 0;
}

方法二:

#include <stdio.h>

int main() {

	int a[] = { 1,2,3,4,5,6,7,8,9,10,11};//定义一个数组a,并初始化它所有的元素

	int i = 0;
	int j = sizeof(a) / sizeof(a[0]) - 1;
    int temp;

    while (i < j){
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
        i++;
        j--;
    }

	for (int k = 0; k < sizeof(a) / sizeof(a[0]); k++) {
		printf("%d\t", a[k]);
	}


	return 0;
}
冒泡排序
#include <stdio.h>

int main(){

    int a[] = {10,5,6,3,8,9,4,7,1,2}; //定义一个数组,初始化所有的元素
    int len = sizeof(a) / sizeof(a[0]); //数组长度
    int i = 0;
    int j = 0;
    int temp;

    //外层循环
    for (i = 0; i < len - 1;i++){
        //内层循环目的是比较两个相邻的数,将较大的放到后面
        for (j = 0;j < len - 1 - i;j++){
            if (a[j] > a[j + 1]){//交换
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;   
            }
        }
    }

    for (int k = 0;k < len;k++){
        printf("%d\t",a[k]);
    }

    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值