首页 > 其他分享 >C语言【数组】

C语言【数组】

时间:2023-11-19 22:25:48浏览次数:28  
标签:arr int C语言 char 数组 长度 sizeof

C语言【数组】

一、数组的一些零碎的知识

1、数组在内存中的空间是连续的,数组下标从0开始;
数组中存储的类型是一致的(只能存储同一类型,这样可以快速定位某元素)
2、指针可看作存储地址的变量,数组名可看作地址那个常量,所以数组名不可修改 。可以改的是数组元素:a[0] 或 *a

二、一维数组

1、整型数组的定义

​ 第一种。声明后定义。声明后数组的值是随机的

int arr1[3];

​ 第二种。声明的同时赋初始。这种情况赋值个数--少补0,多报错

int arr2[3] = {4, 5, 6};

​ 第三种。不指定元素个数,直接初始化。

int arr3[] = {4, 5, 6};
2、数组越界问题

​ C语言的数组越界是个特性。编译和运行时都不会报错

​ 一般情况,在栈种分配的变量内存,之前的变量在高地址,所以数组越界可能会修改或读取到之前的数据。不建议故意越界。

3、数组长度

​ sizeof计算的是字节数,所以一维数组的数组长度计算如下:

sizeof(arr) / sizeof(arr[0]);
4、字符型数组的定义

​ 第一种。单个字符地赋值,需要手动加 '\0',不加'\0'的话会往下一直找,直到碰到有'\0'的地方,这样后面的值会很随机。

char str1[3] = {'h', 'e', 'l'};	// 长度3,不自动补'\0'

​ 第二种。声明并赋值时少赋值,利用 补0 的特性,让它添加上0。略。

​ 第三种。

char str3[] = {'a', 'b'}; 	// 长度2,不会自动补'\0'

​ 第四种。

char str4[] = {"abc"}; 	// 长度4,自动补'\0'
char str4_1[] = "abc";	// 长度4,自动补'\0' 

​ 第五种。注意这个是上面的指定了长度。一般没这样写的,千万不要误导,这个不自动补'\0'。

char str5[3] = "hel";	// 长度3,不自动补'\0'

三、二维数组

1、多维数组在内存中不是以矩阵形式存储,而是 第一行存储完后 第二行接着往下来 这样存储的。
2、对于int a [2] [3]; 这个数组来说,a [0] [3] 与 a [1] [0] 表示的是同一个元素。理解吧。
3、二维数组的声明并初始化

​ 第一种。

int a[2][3] = {
    {1, 2, 3},
    {1, 2, 3}
};

​ 第二种。

int a[2][3] = {1, 2, 3, 4, 5, 6};

​ 第三种。省略有几行,即省略第一个[]里的长度指定。

int a[][3] = {1, 2, 3, 4, 5, 6};
int a[][3]; // 这样肯定不行,既然省略了行,就不能省略总个数。
4、二维数组中长度的计算。
sizeof(arr)/sizeof(arr[0]);  	// 得到有几行
sizeof(arr[0])/sizeof(arr[0][0]);	// 得到每列的个数
sizeof(arr)/sizeof(arr[0][0]);		// 得到数组总长度(个数),知道这个可以用一个for循环遍历数组  a[0][0] -- a[0][个数-1]
// 解释一下
sizeof(arr); 	// 得到列表 总字节数
sizeof(arr[0][0]);	// 得到每个元素的字节数,即类型的字节数

C语言没有动态声明变量的方法。

标签:arr,int,C语言,char,数组,长度,sizeof
From: https://www.cnblogs.com/wangsiyaoa/p/17842803.html

相关文章

  • C语言笔记6
    whille循环语句1.语句形式:while(表达式)语句 3.语法说明:.表达式类型不限、按其值是0或非0决定是否进行循环。.循环体内应注意设置修改循环条件的语句。否则循环无法终止。do-while循环语句语句形式:do语句while(表达式); 3.语法说......
  • 「C语言程序设计」程序设计的基本概念
    算法的特性有穷性:算法必须在执行有限的步骤后终止,不会无限循环或进入死循环确定性:算法的每个步骤必须明确定义,没有歧义。相同输入应产生相同的输出可执行性:算法中的每个步骤都必须能够被执行,不会包含无法实现的操作有零个或多个输入:算法可以接受零个或多个输入参数,这些参数是......
  • C语言程序设计P5
    1if条件语句ifelse//&&并且符号if或else控制多条语句需要用{}悬空else出现多个if,else与最近一个if组成循环=是赋值,==是判断相等2打印奇数代码第一种第二种3switch语句eg:打印星期swtich打印不同的swtich打印连续一样的default:当输入内容无法识别时4swtich小练习......
  • 【Java基础】异或特点+交换变量数值+数组反转
    异或特点二进制位不同为true,相同为false一个数被另外一个数异或两次,该数不变交换变量数值利用上述异或第2个特点实现交换两个整数类型变量数值代码publicclassXor{publicstaticvoidmain(String[]args){inta=10,b=4;a=a^b;......
  • 数组相关知识的梳理
    数组相关知识的梳理一维数组定义inta[100];inta[]={1,2,6,5};总之,要让计算机识别出要给定义的数组多少的容量输入与输出多多使用循环结构输入Eg.inti,a[100];charch;for(i=0;i<=l0;i++){scanf("%d%c",&a[i],&ch);}输出Eg.for(i=0;i<=10;i++)......
  • 【Java基础】数组的动态初始化
    数组动态初始化:手动指定数组长度,系统为数组自动分配默认初始化值格式:数据类型[]数组名=new数据类型[长度];默认值的分类:整数:0小数:0.0布尔:false字符:'\u0000'(Unicode字符,常见的体现是空白字符)引用数据类型(数组、类、接口):null......
  • c语言学习-while 循环
    intmain(){ inta=0; printf("joinus"); printf("codenow"); while(a<20000){ printf("写了%d\n",a); a++; } printf("已经写好了%d\n",a); printf("有好offer了"); return0;}......
  • c语言学习 - 逗号表达式及操作符
    条件操作符(三目操作数)exp1?exp2:exp3;若exp1的结果为真,则exp2是整个表达式的结果若exp1为假,则执行exp3作为整个表达式的结果赋值z++为先赋值再自增。++z为先自增再赋值。......
  • 并非所有的大括号都表示数组
    问题:下图中的公式为什么错误。解决:单元格中输入的“{3,5,8}”并非数组,而是一个文本字符串,不具备数组功能。可以改成以下公式:{=IF(SUM(N(A2=EVALUATE(C$1))),"OK","")}=IF(SUM(N(A2=--(0&TEXTSPLIT(C$1,{"{","}",","})))),"OK","")=IF(COUNTI......
  • 【教3妹学编程-算法题】三个无重叠子数组的最大和
    2哥 :3妹,咋啦?一副苦大仇深的样子?3妹:不开心呀不开心,羽生结弦宣布离婚。2哥 :羽生什么?3妹:羽生结弦!2哥 :什么结弦?3妹:羽生结弦!!!2哥:羽生结弦是谁?他离婚关你啥事啊?3妹:你不知道,他是日本著名花滑运动员,前几个月刚宣布结婚,没想到这么快就离了。真是短时间内震惊我两次!2哥 :哎,人家怎......