IOS开发笔记10-字符串-C语言笔记
来源:互联网 发布:淘宝买家贷款5万怎么贷 编辑:程序博客网 时间:2024/05/01 17:46
1、二维数组的声明和初始化
二维数组也是数组,他具有数组的所有特性。在学习二维数组过程中我们完全可以把一维数组想象成一个“行结构”,把二维数组想象成是一个有行有列的“表格结构”,用每一个单元格来存储数据。
声明语法:元素类型 数组名[行数][列数];
术语:
元素:每一个单元格就是二维数组的元素,用来存储数据
下标:每个元素的下标由两个下标组成,一个行下标,一个列下标
长度:这个二维数组可以存储的数据的个数,也就是单元格的个数。
int arr[3][4]; //正确,三行四列的二维数组int arr1[5][2]; //正确,五行二列的二维数组int arr2[][]; //错误,需要指定行、列
注意:
1.必须要指定二维数组的行数和列数。
2.声明二维数组的时候,行数、列数可以使用常量、变量、表达式、宏。
3.行数、列数可以是1,可以是0,但不是负数和小数。
4.二维数组没有为数组元素赋值,那么这些元素默认值是垃圾值。
赋值:数组名[行下标][列下标] = 数据;
根据下标为二维数组赋值,最大行下标是行数 - 1,最大列下标是列数 - 1。
取值:数组名[行下标][列下标];
取值和赋值一样,也是根据二维数组的下标来取值,最大行下标是行数 - 1,最大列下标是列数 - 1。
int arr[3][4];//声明一个3行、4列的二维数组//为二维数组中每个元素赋值arr[0][0] = 1;arr[0][1] = 2;arr[0][2] = 3;//......arr[2][3] = 10; int num = arr[0][2];//取值并赋值给一个同类型的变量
初始化:
声明二维数组的同时为二维数组的每个元素赋值,初始化二维数组的时候,行数可以省略,但列数无路如何都不能省略。初始化二维数组,支持全部初始化、部分初始化、指定初始化。
//全部初始化int arr[3][4] = {{1,2,3,1},{4,5,6,2},{7,8,9,3}};//声明一个二维数组并初始化每个元素int arr1[][4] = {{1,2,3,5},{4,5,6,2},{7,8,9,5}};//初始化可以省略行数,系统会根据后面大括号来计算出行数int arr2[2][5] = {1,2,3,4,5,6,7,8,9,0};//不需要大括号计算行,会根据行数和列数自动为每个元素赋值int arr3[][5] = {1,2,3,4,5,6,7,8,9,0};//省略行,但不能省略列.自动从第一个元素依次为每个元素赋值 //部分初始化int arr4[3][4] = {{1},{2},{3}};//为行第一个元素赋值,并初始化其他元素为0int arr5[3][4] = {1,2,3,4};//按照顺序为每一个元素赋值,并初始化其他元素为0 00 01 02 03 10 11这样的顺序int arr5[][4] = {1,2,3,4};//可以省略行,自动根据列算出行,按照顺序为每一个元素赋值,并初始化其他元素为0 //指定初始化int arr6[3][4] = {[1] = {10,20,30,40},[2] = {10,40,21,55}};//为行下标1和2的的元素赋值,其他元素初始化0
2、遍历二维数组
#include <stdio.h> int main() { //声明一个二维数组并初始化 int arr[3][4] = {12,33,55,22,6,4,8,64,99,33}; //外层控制行 for (int i = 0; i < 3; i++) { //内层控制列 for (int j = 0; j < 4; j++) { printf("arr[%d][%d] = %d\n",i,j,arr[i][j]); } } return 0;}
3、二维数组在内存中的存储
本质:
二维数组的本质其实是一个一维数组,每一行就是这个一维数组的元素,也就是每一行都是一个一维数组,也就是一维数组的元素也是一个一维数组。比如:
//其实这是一个一维数组,一维数组的长度为3,并且每一个元素是一个长度为4的一维数组数组。int arr[3][4] = { {10,20,30,40}, {50,60,70,80}, {90,100,110,120}};//遍历一维数组第一个元素的数组里的元素,也就是遍历了二维数组的第1行的元素for(int i = 0;i < 4;i++){ printf("arr[0][%d] = %d\n",i,arr[0][i]);} printf("arr[0] = %p\n",arr[0]);//arr[0] 就是第一个一维数组名
内存分配:在分配字节空间的时候,从高地址向低地址分配一块连续的空间,空间的大小为(每个元素占用的空间 * 元素个数)也就是(sizeof(数组的数据类型) * 行 * 列)。
长度 = sizeof(二维数组名) / sizeof(数据类型); 行数 = sizeof(二维数组名) / sizeof(二维数组名[0]); 列数 = sizeof(二维数组名[0]) / sizeof(数据类型);
4、二维数组与函数
#include <stdio.h>//如果函数的参数是一个一维数组,那么在调用函数的时候,可以传入一个二维数组的行,因为二维数组的行本质就是一个一维数组。void printfArray(int arr[],int length){ for (int i = 0; i < length; i++) { printf("arr[0][%d] = %d\n",i,arr[i]); }} //当二维数组作为函数的参数,那么在调用函数的时候,需要先传入二维数组的行和列,然后在传入二维数组名,参数的二维数组必须要指定列。void test(int rows,int cols,int arr[][cols]){ for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("arr[%d][%d] = %d\n",i,j,arr[i][j]); } }} int main(){ //随便整一个二维数组 int arr[4][10] = {76,45,3,98,65,3,77,43,24,90,87,64}; //计算二维数组的行、列 int rows = sizeof(arr) / sizeof(arr[0]); int cols = sizeof(arr[0]) / sizeof(int); //arr[0]就是一维数组名 printfArray(arr[0],rows); //arr是二维数组名 test(rows,cols,arr); return 0;}
5、字符串
字符数组的声明
char chs[5];
初始化
char chs[5] = {'a','b','c','d'};//末尾自动补'\0'
遍历字符数组
int length = sizeof(chs);for (int i = 0;i < length;i++){ printf("%c",chs[i]);}
字符数组的默认值
1.如果声明一个字符数组,如果不为字符数组初始化,那默认也是垃圾值。
2.如果声明一个字符数组同时,我们初始化了部分元素的值,其他元素的值初始化为'\0'。
3.'\0'代表一个不可见的值,打印出来声明都没有。
字符数组存储字符串
//声明5个长度的字符数组,并储存字符char names[5] = {'a','b','c','d','\0'}; //声明5个长度的字符数组,只赋值部分元素,其余元素会自动初始化为'\0'char names0[5] = {'a','b','c','d'}; //声明的时候初始化可以省略长度,会自动计算出来的char names1[] = {'a','b','c','d','\0'}; //可以简写,并自动追加'\0'存储到字符数组char names2[] = {"abcd"}; //将字符串中的每一个字符依次存储到数组之中,并自动追加'\0'char names3[] = "abcd"; //不指定数组长度,那么这个数组的长度就是字符串数据的字符个数+1char names4[] = "abcd"; //如果指定了字符数组的长度,那么数组的长度就是指定长度,存储的字符不能超过长度-1char names5[20] = "abcd"; //如果在初始化一个字符数组的时候,可以给中文。仅限在声明的时候初始化给中文。char names6[] = "大狗";
输出字符串
char str[] = "jack";printf("%s",str);//使用%s格式控制符输出字符串,从给定字符数组地址开始,一个一个字符输出,直到遇到'\0'就结束。
输入字符串
char str[20];scanf("%s",str);//输入的字符不能超过给定的字符数组长度-1,并且不能读取空格。如果输入空格,会认为是结束
- IOS开发笔记10-字符串-C语言笔记
- iOS开发学习笔记 2-7 C语言部分 字符串
- IOS开发笔记1-C语言笔记
- 001-iOS开发前奏-C语言笔记
- C语言笔记-字符串
- 【笔记-C语言】 字符串
- IOS开发笔记7-函数-C语言笔记
- IOS开发笔记8-进制-C语言笔记
- IOS开发笔记9-数组-C语言笔记
- iOS开发C语言字符串
- 010-字符串-C语言笔记
- iOS开发学习笔记 2-4 C语言部分 指针
- iOS开发学习笔记 2-5 C语言部分 数组
- IOS开发笔记2-C语言基础复习
- IOS开发笔记3-C语言基础复习
- IOS开发笔记4-C语言基础复习
- IOS开发笔记5-C语言基础复习
- IOS开发笔记6-C语言基础复习
- 控制孩子玩手机的时间(控制儿童使用手机时间)
- Dorado创建HelloWorld项目
- Codeforces Round #327
- JAVA的String 类【转】
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- IOS开发笔记10-字符串-C语言笔记
- JSP 自定义标签:简单标签
- Linux-CentOS 安装XPDF
- HDU 4857 逃生
- iOS8定位代理方法不回调,解决办法
- 软件工程第三章作业
- Remove Element
- [Leetcode]Pow(x, n)
- 数据结构之栈