C语言基础知识-数组和字符串

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.数组概述

在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组。

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

数组属于构造函数类型:
  一个数组可以分解为多个数组元素:这些数组元素可以是基于数据类型。

二.一维数组

1>.一维数组的定义 

数组名称符合标识符的书写规定(数字,英文字母,下划线)

数组名不能与其他变量名相同,同一作用域内是唯一的。

方括号[]中常量表达式表示数组元素的个数
  int a[] 表示数组a有3个元素。
  其下班从0开始计算,因此3个元素分别为a[],a[],a[] 定义数组时[]内最好是常量,使用数组时[]内即可是常量,也可以是变量。 数组定义格式:
数据类型 数组名[元素个数] 元素个数,代表该数组有多少个相同的数据类型的变量。
数组下标是从0开始的,到数组元素个数减1。
下标用来标识数组中的某一个元素,例如:int arr[];arr[]代表数组中的第二个元素。
数组下标越界:超过了数组元素个数的下标,如果操作越界数据会出现程序错误,比如乱码错误或者程序抛出异常。

2>.一维数组初始化的使用案例

[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# cat array_demo01.c
/*
@author :yinzhengjie
blog:http://www.cnblogs.com/yinzhengjie
EMAIL:y1053419035@qq.com
*/ #include <stdio.h>
#define LEN 5 int main(void)
{
int scores[LEN];
int sum = ; //可以通过数据类型求出数组大小
//int len = sizeof(scores)/sizeof(int);
//也可以通过数组元素求出大小
int len = sizeof(scores) / sizeof(scores[]); for (int i = ;i < len;i++)
{
printf("请输入第%d名学生的成绩:>>> ",i+);
scanf("%d",&scores[i]); //再通过键盘为数组赋值的时候,需要写取地址符号[&]
sum += scores[i];
} //打印成绩
for (int i = ;i < len;i++)
{
printf("第%d名学生,成绩:%d\n",i+,scores[i]);
} //计算平均成绩
printf("班级的平均成绩为:%d\n",sum/); return ;
}
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# gcc -o array_demo array_demo01.c -std=c99
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# ./array_demo
请输入第1名学生的成绩:>>>
请输入第2名学生的成绩:>>>
请输入第3名学生的成绩:>>>
请输入第4名学生的成绩:>>>
请输入第5名学生的成绩:>>>
第1名学生,成绩:
第2名学生,成绩:
第3名学生,成绩:
第4名学生,成绩:
第5名学生,成绩:
班级的平均成绩为:
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#

3>.数组的内存结构

[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# cat array_demo02.c
/*
@author :yinzhengjie
blog:http://www.cnblogs.com/yinzhengjie
EMAIL:y1053419035@qq.com
*/ #include <stdio.h> int main(void)
{
int scores[] = {,,,,}; printf("数组名对应的地址: %p\n",scores); //打印数组名称 printf("数组第一个元素对应的地址: %p\n",&scores[]); //%p打印变量的内存地址,是以无符号十六进制格式打印,打印时需要在变量前加上取地址符号"&" printf("数组第二个元素对应的地址: %p\n",&scores[]); printf("数组第三个元素对应的地址: %p\n",&scores[]); printf("数组第四个元素对应的地址: %p\n",&scores[]); return ;
}
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# gcc -o array_demo02 array_demo02.c
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]# ./array_demo02
数组名对应的地址: 0x7ffd9aad74a0
数组第一个元素对应的地址: 0x7ffd9aad74a0        #不难发现,数组的内存地址其实就是数组第一个元素的内存地址。
数组第二个元素对应的地址: 0x7ffd9aad74a4        #通过输出我们可以看出出来,scores数组中每一个元素地址间隔为4个字节大小,这是为什么呢?原因是一个int类型对应4个字节,而我们在scores数组中恰好存储了5个int类型的元素。
数组第三个元素对应的地址: 0x7ffd9aad74a8
数组第四个元素对应的地址: 0x7ffd9aad74ac
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#
[root@node101.yinzhengjie.org.cn /yinzhengjie/code/day003]#

三.二维数组

四.

五.

C语言基础知识-数组和字符串的更多相关文章

  1. C语言基础:数组和字符串

    数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4 ...

  2. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  3. 第二十四节:Java语言基础-讲解数组的综合应用

    数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...

  4. C# 基础知识系列- 9 字符串的更多用法(一)

    0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...

  5. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  6. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  7. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  8. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  9. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

随机推荐

  1. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  2. UltraEdit 替换符

    1.在每行的最后一行添加字符串: 打开替换,在查找中输入 ^r  在替换栏中输入要替换的字符  再把下边的正则表达式勾选,然后开始或是全部替换就可以了 2.替换回车换行 在查找中输入 要替换的字符  ...

  3. Mac home目录下,创建文件夹,修改权限

    http://php-note.com/article/detail/35e782e145a94042923946cb142b5cd1 1.关闭 SIP 2.sudo mount -uw /

  4. Zabbix使用主动模式进行监控配置方法

    一直都是在用Zabbix的被动模式(即默认模式)进行监控. 但是总有些情况是不适用被动模式的,刚好工作上有这个需求,于是捣鼓了一下,发现配置起来也挺简单的. (1)Agent配置 修改Zabbix-a ...

  5. json_encode不自动转义斜杠“/”的方法

    默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,如图 两种解决办法   其一,正则替换: $a = str_replace(& ...

  6. JDK本地内存追踪NMT

    通常情况下, JVM占用的内存不仅仅是-Xmx, -Xms等指定的大小, 因为JVM也是一个应用, 它需要额外的空间去完成它的工作, 除了堆外, JVM会分配内存的地方包括以下这些: Metaspac ...

  7. 玩转 SpringBoot 2 快速整合 Filter

    概述 SpringBoot 中没有 web.xml, 我们无法按照原来的方式在 web.xml 中配置 Filter .但是我们可以通过 JavaConfig(@Configuration +@Bea ...

  8. Scratch学习中需要注意的地方,学习Scratch时需要注意的地方

    在所有的编程工具中,Scratch是比较简单的,适合孩子学习锻炼,也是信息学奥赛的常见项目.通常Scratch学习流程是,先掌握程序相关模块,并且了解各个模块的功能使用,然后通过项目的编写和练习,不断 ...

  9. Connection to 天mysql failed. [08001] Could not create connection to database server. Attempted ,报错处理方法

    https://blog.csdn.net/myzh215219/article/details/90314345 点击图上的DRIVER,然后点击GO TO DRIVER,之后更改合适的驱动. 我的 ...

  10. Maven 初学+http://mvnrepository.com/

    了解 maven是一款服务于java平台的自动化构建工具(项目管理工具) 构建:全方位.多角度.深层次地建立 项目构建是一个项目从:源代码.编译.测试.打包.部署.运行的过程 用来解决团队开发遇到的问 ...