学习笔记—C语言基础篇03
来源:互联网 发布:让 皮埃尔.热内 知乎 编辑:程序博客网 时间:2024/06/10 06:27
1、数组:一组相同而有序的数据类型的集合,在内存中占一片连续的空间
格式:数据类型 数组名[元素个数];
在c语言中数组元素个数必须是一个常量。
数组元素个数 = sizeof(数组名)/数据类型大小;
数组名是一个常量,保存的整个数组的首地址; &arr[0] == arr;
2、二维数组定义和使用
本质多个一维数组。
二维数组长度:sizeof(数组名)/sizeof(类型说明符)、sizeof(arr)/sizeof(int)
二维数组的行:sizeof(数组名)/sizeof(一行长度)、sizeof(arr)/sizeof(arr[0])
二维数组的列:sizeof(一行长度)/sizeof(一个元素长度)、sizeof(arr[0])/sizeof(arr[0][0])
#include <stdio.h>int main(){ //定义了一个二维数组,名字叫a //二维数组是本质上还是一维数组,此一维数组有3个元素 //每个元素又是一个一维数组int[4] int a[3][4] = { 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12 }; //数组名为数组首元素地址,二维数组的第0个元素为一维数组 //第0个一维数组的数组名为a[0] printf("a = %p\n", a); printf("a[0] = %p\n", a[0]); //测二维数组所占内存空间,有3个一维数组,每个一维数组的空间为4*4 //sizeof(a) = 3 * 4 * 4 = 48 printf("sizeof(a) = %d\n", sizeof(a)); //测第0个元素所占内存空间,a[0]为第0个一维数组int[4]的数组名,4*4=16 printf("sizeof(a[0]) = %d\n", sizeof(a[0]) ); //测第0行0列元素所占内存空间,第0行0列元素为一个int类型,4字节 printf("sizeof(a[0][0]) = %d\n", sizeof(a[0][0])); //求二维数组行数 printf("i = %d\n", sizeof(a) / sizeof(a[0])); // 求二维数组列数 printf("j = %d\n", sizeof(a[0]) / sizeof(a[0][0])); //求二维数组行*列总数 printf("n = %d\n", sizeof(a) / sizeof(a[0][0])); return 0;}
字符数组和字符串数组区别:
1.C语言中没有字符串这种数据类型,可以通过char的数组来替代;
2.字符串一定是一个char的数组,但char的数组未必是字符串;
3.数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
#include <stdio.h>int main(){ char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' }; //普通字符数组 printf("c1 = %s\n", c1); //乱码,因为没有’\0’结束符 //以‘\0’(‘\0’就是数字0)结尾的字符数组是字符串 char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0'}; printf("c2 = %s\n", c2); //字符串处理以‘\0’(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出 char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'}; printf("c3 = %s\n", c3); return 0;}#include <stdio.h>// C语言没有字符串类型,通过字符数组模拟// C语言字符串,以字符‘\0’, 数字0 结束int main(){ //不指定长度, 没有0结束符,有多少个元素就有多长 char buf[] = { 'a', 'b', 'c' }; printf("buf = %s\n", buf); //乱码 //指定长度,后面没有赋值的元素,自动补0 char buf2[100] = { 'a', 'b', 'c' }; printf("buf2 = %s\n", buf2); //所有元素赋值为0 char buf3[100] = { 0 }; //输出之后是一排空 //char buf4[2] = { '1', '2', '3' };//数组越界 char buf5[50] = { '1', 'a', 'b', '0', '7' }; printf("buf5 = %s\n", buf5); 输出 1ab07 char buf6[50] = { '1', 'a', 'b', 0, '7' }; printf("buf6 = %s\n", buf6); 输出 1ab char buf7[50] = { '1', 'a', 'b', '\0', '7' }; printf("buf7 = %s\n", buf7); 输出 1ab //使用字符串初始化,编译器自动在后面补0,常用 char buf8[] = "agjdslgjlsdjg"; //'\0'后面最好不要连着数字,有可能几个数字连起来刚好是一个转义字符 //'\ddd'八进制字义字符,'\xdd'十六进制转移字符 // \012相当于\n char str[] = "\012abc"; printf("str == %s\n", str); return 0;}
字符串输入
scanf的3种应用:
接收有限字符:
char ch1[] ;char ch2[] ;char ch3[]";scanf("%1s%2s%3s",ch1,ch2,ch3);接收空格:scanf("%[^\n]",ch1);接收有限数字:int a,b,c;scanf("%1d,%2d,%3d",&a,&b,&c);char ch1[] ="abc";接收不想接收的(用*屏蔽不想接收的)int a;sacnf("%*c%d",&a);
输入输出函数
1、gets(ch):可以接受空格,以换行符(\n)和文本结尾标志( ),自动把\n替换成\0结束输入。
2、fgets(ch,sizeof(ch),stdin):在文件中进行读写操作,也可以接收字符串
如果接收的字符串小于定义数组长度,在接收到\n结束时自动把\n作为字符串的一部分并且在其后面加上\0;
如果接收的字符串长度大于定义数组长度,默认接收最长长度并在末尾加上\0;
3、puts(" abcd");自动输出换行
4、printf();
5、fputs(ch,stdout);
函数调用产生随机数
#include <stdio.h>#include <time.h>#include <stdlib.h>int main(){ time_t tm = time(NULL);//得到系统时间 srand((unsigned int)tm);//随机种子只需要设置一次即可 //srand((unsigned int)time(NULL)); int r = rand() % 100;//0 - 100 printf("r = %d\n", r); return 0;}
0 0
- 学习笔记—C语言基础篇
- 学习笔记—C语言基础篇03
- 学习笔记之C语言基础篇
- 学习笔记—C语言基础篇02
- 学习笔记—C语言基础篇04
- 学习笔记—C语言基础篇05
- 学习笔记—C语言基础篇06
- 学习笔记—C语言基础篇07
- 学习笔记—C语言基础篇08
- 学习笔记—C语言基础篇09
- C语言基础学习笔记
- Linux C学习笔记——C语言基础
- C语言基础——学习笔记整理3
- C语言基础学习笔记综合
- 宏定义-C语言基础学习笔记
- C语言学习笔记 链表基础
- C语言学习笔记--基础语法一
- C语言学习笔记--基础语法二
- yii2 中的request 请求的方法详解
- Docker中如何删除image(镜像)
- UVA-512-Spreadsheet Tracking 简单模拟题 对一个表进行增删操作后查表 打表写法+详细注释
- swift——复合类型——Dict
- js中的this
- 学习笔记—C语言基础篇03
- RxJava&Retrofit
- File google-services.json is missing. The Google Services
- C语言计算字符串长度的几种方法
- JStorm学习笔记-集群环境安装部署
- uwsgi的定时脚本任务
- vue引入jquery的方法
- 机器学习笔记9——特征选择
- Nginx从入门到精通