学习笔记—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
原创粉丝点击