IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [2021-08-11]C语言入门简明教程第6章-数组、字符串和指针 -> 正文阅读

[C++知识库][2021-08-11]C语言入门简明教程第6章-数组、字符串和指针

C语言入门简明教程

0x06 数组、字符串和指针

写在开头

如果要存储大量数据,没法一个个地进行变量声明。这时,我们就需要使用数组来方便存储啦。
同样地,字符串本质上也是数组的一种。
对于一些数据,指针提供一种快速的访问和修改方式,也是老师最喜欢考的内容。

1.一维数组

顾名思义,数字组成的组。 数组是一个非常灵活的存储数据方式的结构。如何创建一个数组呢?非常简单:

int a[10];//创建一个有10个元素大小的数组a

数组创建完了,如何访问其中元素呢?我们通过下标来访问指定元素,注意,数组元素的下标是从0开始的,因此,例子中所有数字的下标为0到9共十个数字,其他位置访问都是不合法的哦~

a[10]不合法,因为总共是0~9,不存在下标为10的元素
在这里插入图片描述

有了数组,我们也需要对数组进行初始化,下面介绍三种方法:

用for循环

int a[10], i;
for(i = 0; i < 10; i++) {
	a[i] = 0;//初始化为0
}

赋初值

int a[10]={0};//全为0
int b[3]={1,2,3};//指定每一位置的值

使用memset

memset格式为:

memset(数组,初值,数组长度);
memset(a,0,a+10);

2.二维和高维数组

如果有一张黑白图片要存,那么一维数组肯定是不够用了,我们于是需要二维数组;同样地,我们也需要更高维数组来存储一些更复杂的东西,格式非常简单:

int a[10][10];//一个10x10的二维数组
int b[11][45][14][19][19][]...//运存够可以继续加

C语言的数组在内存中是按行存储的~

获取数组所占空间、获取数组元素个数

使用sizeof函数,可以获得所占的内存空间,例子如下

int a[2][2];
printf("%d\n",sizeof(a));//输出a所占空间大小
printf("%d\n",sizeof(a)/sizeof(int));//输出a元素总个数

结果:
在这里插入图片描述
当然啦,数组的类型是不止int一种的,还可以是float,double等等,等学了结构体我们还能创建结构体数组等等。

3.字符串(字符数组)

在C语言中,字符串也是一个非常常用的东西。字符串实际上是以 \0为结尾的一维字符数组。我们有如下三种方式创建字符串:

char a[10]="xxxxxx";//创建一个最长为十个字符长度的字符串,具体字符串长度根据内容而定。
char b[]="xxxxxx";//不定长度的字符串。
char* b="xxxxx";//不定长度的字符串,带星号的是指针,下一部分讲哦~

对于字符串,有很多函数,注意使用之前需要引用头文件:

#include<string.h>

strlen(s):获取字符串长度

char a[100]="xxxx";
char* b="abcd";
printf("%s,%d\n",a,strlen(a));
printf("%s,%d\n",b,strlen(b));

在这里插入图片描述
------------

strcat(s1,s2):追加字符串 s2 到字符串 s1 的末尾

char a[]="123",b[]="456";
strcat(a,b);
printf("%s,%d\n",a,strlen(a));
printf("%s,%d\n",b,strlen(b));

在这里插入图片描述
------------

strcpy(s1, s2): 复制字符串 s2 到字符串 s1

char a[]="123",b[]="456";
strcpy(a,b);
printf("%s,%d\n",a,strlen(a));
printf("%s,%d\n",b,strlen(b));

在这里插入图片描述
------------

strcmp(s1, s2):字符串比较

如果 s1 、s2 相同则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
这边的大小是按照字典序排的,就像为什么考一样的分数你的名字就在另一个人后面,他的名字在字典里排的比你前~
一般C语言里strcmp的字典序就是ASCII表里面的出现顺序。

char a[]="123",b[]="456";
printf("%d\n",strcmp(a,b));

在这里插入图片描述
------------

strchr(s, c):字符串查找指定字符

该函数返回一个指针,指向字符串s中字符c第一次出现的地址,没有则返回0,注意,此函数返回的是char*,用%s输出可以获得该字符和其后面的所有内容。

char *a="123";
printf("%s\n",strchr(a,'2'));

在这里插入图片描述
------------

strstr(s1, s2):字符串查找子字符串

该函数返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置,没有则返回0

char *a="1234567890",*b="236";
printf("%d\n",strstr(a,b));

在这里插入图片描述
------------

4.指针

终于到指针啦~指针是啥?就是一个用来存另一个变量或常量地址的变量或常量。但是常量指常量一般不会有什么用处,我们一般是用指针去指向一个变量,这样可以通过指针把它指着的变量读取或者修改,做到“指哪打哪”,方便跨函数修改和变量的快速操作。

指针的声明

还是以int为例子

int a=1;
int* p=&a;//指针存的是地址,这边我们取出a的地址,于是p就指向了a,但b也有自己独立的地址


那么如何获取内容或者修改呢?加一个*,就可以像访问原变量一样进行操作啦~
一个利用指针的简单的数字交换例子:

#include<stdio.h>
void swap(int* a, int* b){
	int temp=*a;
	*a=*b;
	*b=temp;
}
int main(){
	int a=2333,b=6666;
	swap(&a,&b);//&符号取地址
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

在这里插入图片描述
我们再回头看数组,前面说过一个数组a,访问它则能得到第一个元素的地址,那么可以得到:

int a[10]={...};
int i=...;//可取0~9
printf("a[i]=%d\n",*(a+i));//通过修改i的值可以访问数组其他元素
int a[22][22]={...};
int j=...;
printf("a[i][j]=%d",*(*(a+i)+j)));//同理

例子:

int a[2][2]={1,2,3,4};
printf("a=%d,b=%d\n",**(a),*(*(a+1)+1));

在这里插入图片描述
------------
当然,也可以有指向指针的指针,多加点星号就行;也可以创建指针数组(全是指针的数组)和数组指针;当然也可以有指向函数的指针。
函数指针的定义:

返回值类型 (*指针变量名) (参数列表);
//例子:
int (*pointer1)(int a, int b);//创建一个名为pointer1的函数指针,可以指向一个返回值为int,且参数列表相同的函数

总结

这章要多试一试哦,Practice makes perfect~
EOF

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:25:18  更:2021-08-12 16:26:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 17:33:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计