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. ios开发学习笔记001-C语言基础知识

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

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

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

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

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

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

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

  8. OC语言基础知识

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

  9. 李洪强iOS开发之OC语言基础知识

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

随机推荐

  1. Open vSwitch流表应用实战

    本文参考:Open vSwitch流表应用实战 一个通过改变流表下发而实现的互相通信实验. 实验目的: 掌握Open vSwitch下发流表操作: 掌握添加.删除流表命令以及设备通信的原理. 原理:. ...

  2. PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法

    1.在这里下载对应的.whl文件,注意别改文件名! http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml Ctrl + F,输入lxml,找到下面这段 Lxm ...

  3. ntpd和ntpdate

    以无GUI 的Ubuntu 为例 1. ntpdate ntpdate是Ubuntu发行版的标配.按Ubuntu14.04的官方文档(这里),Ubuntu在启动时,会调用ntpdate,根据Ubunt ...

  4. CDbConnection failed to open the DB connection

    打开数据库失败 有我遇到的有寄给问题: 1 Not find Drive 2 SQLSTATE[28000] [1045] Access denied for user 'xxx'@'localhos ...

  5. VS2015 +Qt5 串口工具

    简单的小工具是VS2015 + Qt5.6.1实现的,界面部分是Qt实现,串口是封装的WinAPI,把串口收发模块封装成了个Serialport.dll 供Qt界面调用. 由于VS2015需要CRT运 ...

  6. python+selenium自动化软件测试(第13章):selenium面试题

    前言最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下 一.selenium中如何判断元素是否存在?expected_conditions模块提供了16种判断方法 ...

  7. SpringCloud的服务消费者 (一):(rest+ribbon)访问注册的微服务

    采用Ribbon或Feign方式访问注册到EurekaServer中的微服务.1.Ribbon实现了客户端负载均衡,Feign底层调用Ribbon2.注册在EurekaServer中的微服务api,不 ...

  8. Day03 - Ruby比一比:Module的include与extend

    前情提要在第一天里,我们很激昂地用Ruby的类别.物件.方法,写了开赛宣言!在第二天里,我们比较了方法与模块,比的过程中,发现模块多了包含(inclusion)与延伸(extension). 超级比一 ...

  9. Oracle时间日期函数

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年 ...

  10. go 的正则表达式

    go 操作字符串.由于 go 中的字符串不是对象,所以没有直接操作字符串的相关方法.要操作字符串可以使用 strings 包或者 regexp 包处理. 一.简要介绍一下,strings 包 (str ...