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. (原)ffmpeg中filter开发过程遇到的坑<一>

    最近在使用ffmpeg开发了一些滤镜filter功能,中间出现一些问题,今天想把这部分的内容整理为笔记,方便以后遇到同样问题的时候,方便翻阅. author:lihaiping1603@aliyun. ...

  2. DELPHI 数据库控件心得

    TField对象的SetText和GetText事件处理函数 使用TField对象的SetText和GetText事件处理函数可方便的解决字段的代码与代码所对应值的显示问题 TSimpleDatase ...

  3. Java之输入和输出

    输出 在前面的代码中,我们总是用System.out.println()来向屏幕输出一些内容: println是print line的缩写,表示输出并换行.因此,如果输出后不想换行,可以用print( ...

  4. mybatis异常集锦

    [Mybatis]报错:Malformed OGNL expression: name!= null and name != ' ' [Mybatis]报错:Malformed OGNL expres ...

  5. kafka java项目测试使用

    引入依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11 ...

  6. Ubuntu搭建交叉编译开发环境

    在Linux驱动开发过程中,往往需要搭建交叉编译开发环境,其中,最重要的环节就是安装交叉编译工具链,本文介绍如何在Ubuntu下搭建交叉编译开发环境. 1.官网下载交叉编译工具链 链接如下: http ...

  7. List集合分批多线程处理,同时控制最大并发

    业务中,要实现数据日终同步,采用将同步文件中的数据封装成List集合分批处理加多线程的方式,根据数据量动态设置线程数,同时控制最大并发数量(业务中有IO操作,避免过大并发导致堵塞),实现效率提高 // ...

  8. 在有nginx做反向代理时候,如何获取用户真实Ip信息

    在获取用户的Ip地址时,不一定可以获取到用户真实的地址信息,这要看代理服务器的类型,代理服务器有普通匿名代理服务器,高匿代理服务器,像这种情况很难获取到用户真实的Ip地址 假如用户没有使用匿名代理服务 ...

  9. fineui整合kindeditor的例子

    如果看不清: http://fineui.com/bbs/forum.php?mod=viewthread&tid=6683   注意:高于fineui v4.2.0的版本kindeditor ...

  10. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...