栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言-数组和字符串-学习笔记06

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言-数组和字符串-学习笔记06

文章目录
  • 1. 数组
    • 1.1 一维数组
    • 1.2 二维数组

1. 数组
  • 构造数据类型之一
1.1 一维数组
  • 用法:<存储类型> <数据类型> <数组名> [<表达式>],比如int a[6]
  • 数组的初始化:type var[n]={..., ..., ...};
    • 数组不初始化,其元素值为随机值
    • 对存储类型为static的数组不初始化,系统会自动赋0值
    • 初始化时可以给定部分值:
    int a[6]={3,4}, i;
    for (i=0; i<6; i++)
    	printf("%d ", a[i]);
    printf("n");
    
    3 4 0 0 0 0 
    
  • 编译时分配连续内存字节数=数组元素数*sizeof(元素数据类型)
  • 用上面那个例子a指向内存首地址
    int a[6], i;
    for (i=0; i<6; i++)
    	printf("第%d个元素的地址:%pn", i, &a[i]);
    printf("a:%pn", a);
    printf("数组占的总内存空间:%ldn", sizeof(a));
    printf("假如不知道数组长度,可以通过sizeof(a)/sizeof(int)=%ld得到", sizeof(a)/sizeof(int));
    
    Return
    第0个元素的地址:0x7fff33222530
    第1个元素的地址:0x7fff33222534
    第2个元素的地址:0x7fff33222538
    第3个元素的地址:0x7fff3322253c
    第4个元素的地址:0x7fff33222540
    第5个元素的地址:0x7fff33222544
    a:0x7fff33222530
    数组占的总内存空间:24 //=4*6
    假如不知道数组长度,可以通过sizeof(a)/sizeof(int)=6得到
    
    
  • 注意:C语言对数组不做越界检查使用的时候要注意
  • 练习:从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列。
#include 

# define n 10
int main(int argc, char *argv[])
{
	int int_list[n], min_value=9999, i, j, idx, tmp;
	printf("Please input a vector with %d entries: ", n);
	for (i=0; i
		tmp = scanf("%d", &int_list[i]);
	}
	for(i=0; i
		min_value = int_list[i];
		for(j=i+1; j
			if (min_value > int_list[j]){
				min_value = int_list[j];
				idx = j;
			}
		
		}
		tmp = int_list[i];
		int_list[i] = int_list[idx];
		int_list[idx] = tmp;
	}
	for (i=0; i
		printf("%d ", int_list[i]);
	}
	putchar('n');
	return 0;
}
1.2 二维数组
  • 用法:数据类型 数组名[行数][列数],声明时列数不能省略,但行数可以
  • 初始化有两种
    • 分行初始化:
    int a[2][3]={{1, 2, 3}, {4, 5, 6}}; //基本用法
    int a[2][3]={{1, 2}, {3}}; //部分初始化,返回{{1, 2, 0},{3, 0, 0}}
    int a[][3]={{1, 2}, {3}}; //省略行号,返回{{1, 2, 0},{3, 0, 0}}
    
    
    • 按元素排列顺序初始化:
    int a[2][3]={1, 2, 3, 4, 5, 6}; //会警告少括号不规范,但是能编译能运行
    
  • 虽然这是二维数组,但在内存中还是一维排序的,且按行优先
  • 索引
行索引元素索引元素索引元素索引
a[0]a[0][0]a[0][1]a[0][2]
a[1]a[1][0]a[1][1]a[1][2]
a[2]a[2][0]a[2][1]a[2][2]
  • 举例
    int a[2][3];
    int i, j;
    for (i=0;i<2;i++){
    	for (j=0; j<3; j++)
    		printf("%p ", &a[i][j]);
    	putchar('n');
    }
    printf("a: %p %ldn", a, sizeof(a));
    printf("a[0]: %p %ldn", a[0], sizeof(a[0]));
    printf("a[1]: %p %ldn", a[1], sizeof(a[1]));
    return 0;
    
    Return
    0x7fff16508a80 0x7fff16508a84 0x7fff16508a88 
    0x7fff16508a8c 0x7fff16508a90 0x7fff16508a94 
    a: 0x7fff16508a80 24
    a[0]: 0x7fff16508a80 12
    a[1]: 0x7fff16508a8c 12
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/890101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号