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. Failed to open .vcf.gz: could not load index

    这类报错在我使用bcftools index file.vcf.gz进行index出现的. 解决办法是换用tabix进行index,命令为tabix -p vcf file.vcf.gz. 用tabi ...

  2. [数据结构 - 第6章] 树之二叉排序树(C语言实现)

    一.什么是二叉排序树? 对于普通的顺序存储来说,插入.删除操作很简便,效率高:而这样的表由于无序造成查找的效率很低. 对于有序线性表来说(顺序存储的),查找可用折半.插值.斐波那契等查找算法实现,效率 ...

  3. Windows版的OpenJDK下载(Red Hat 提供)

    OpenJDK 在linux下安装很简单(yum安装),但是OpenJDK的官网没有为我们提供Windows版的安装软件.庆幸的是,Red Hat(红帽)为我们提供了windows版的安装软件. 下载 ...

  4. Python入门学习(1)

    静态语言: C/C++.Java 编译器一次性生成目标代码,优化更方便 程序运行速度快 动态语言: Python.JavaScript.PHP 执行程序时需要源代码,维护更灵活 源代码在维护灵活.跨多 ...

  5. js精度缺失问题

    /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. ** 调用:accAdd(arg ...

  6. 如何自己手动修改win10磁贴背景颜色?

    前言 当我们安装完应用后,可以选择将应用图标固定到"开始"屏幕,于是就会产生一个磁贴,有的应用会自带背景颜色,有的则是默认的主题色.其实这个只不过是应用本身没有没有去适配win10 ...

  7. 如何将Prometheus仪表板添加到Grafana

    Grafana是可视化的时间序列的基础设施和应用程序指标领先的图形和仪表盘构建的,但在许多其他领域,包括工业传感器,家庭自动化,天气和过程控制使用.它为您的团队和全世界提供了一种强大而优雅的方式来创建 ...

  8. Django框架(十二)-- 中间件、CSRF跨站请求伪造

    中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...

  9. git 学习笔记 ---标签管理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  10. Hive 系列(三)—— Hive CLI 和 Beeline 命令行的基本使用

    一.Hive CLI 1.1 Help 使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助,显示如下: usage: hive -d,--define <key=va ...