学习笔记—C语言基础篇03

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值