C语言基础知识-数组和字符串
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语言基础知识-数组和字符串的更多相关文章
- C语言基础:数组和字符串
数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4 ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- C# 基础知识系列- 9 字符串的更多用法(一)
0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
随机推荐
- Maya编程——沿Curve绘制圆柱
操作流程: 1. VS运行代码,生成插件 2. 打开Maya绘制曲线,加载插件 3. 选中绘制的曲线,运行插件 Posts1.0 代码: #include <maya/MSimple.h> ...
- [原]部署kubernetes dashboard(二)
####################### 以下为声明 ##################### 此文档是之前做笔记在两台机上进行的实践,kubernetes处于不断开发阶段 不能保证每 ...
- 封装redis操作 php版本
<?php namespace App\Service; use App\Service\BaseService; use Illuminate\Support\Facades\Redis; / ...
- darkflow测试和训练yolo
转自 https://blog.csdn.net/u011961856/article/details/76582669参考自github:https://github.com/thtrieu/dar ...
- 【ML基础】皮尔森相关系数(Pearson correlation coefficient)
前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完
- React全家桶+Material-ui构建的后台管理系统
一.简介 一个使用React全家桶(react-router-dom,redux,redux-actions,redux-saga,reselect)+Material-ui构建的后来管理中心. 二. ...
- 【Maven学习】Eclipse使用maven问题集
环境 jdk 1.8 eclipse 4.7 apache-maven-3.6.1 一.eclipse 编译maven工程步骤 1.Update Project 2.maven clean 3.mav ...
- Intellij IDEA 启动出现“前言中不允许有内容”
修改错误方法,在IDEA的workspace中找到 .idea 目录下的workspace.xml文件删除即可.
- Windows 10 多用户同时远程登录
win服务器版默认是支持多用户登陆的,甚至可以在主机上用不同用户自己远程登陆自己,如window server 2016. Win10 正常情况下是不允许用户同时远程的,即一个用户远程进来会把另一个用 ...
- 自动问答最新研究成果展示(SQuAD)
地址:https://rajpurkar.github.io/SQuAD-explorer/ Stanford Question Answering Dataset (SQuAD) is a read ...