每日一练(三十)

1.21 字符串数组问题

分析下列输出:

char a[] = {'a', 'b', 'c'};
cout << strlen(a) << endl;

返回的结果不可预料,因为a初始化的时候,结尾没有主动加上‘\0’结束符。而标准库字符串处理函数的时候是以结束符\0为结束的。

同理,如下的程序输出:

char a[] = {'a', 'b', '\0', 'c', 'd', '\0'};
printf("%s", a);

输出的就是:ab了,因为字符串处理以‘\0’为终止。

1.22 二维数组注意事项

本质上讲,所有数组在内存中都是一维线性的,只不过不同的语言可能存储方式不同,有行优先存储和列存储。

以下声明是否正确:

int fun(int a[][]);

看起来没什么问题,问题就出在二维数组的声明上,二维数组的声明初始化不能省略列数!!!

还有一些细节!!!!

int a[3][2] = {(0, 1), (2, 3), (4, 5)};
int *p = a[0];
cout << p[0] << endl;

答案输出:1

猛的一看,认为p[0]=0。

实际上,这里的(0, 1)是逗号运算符,所以int a[3][2] = {1, 3, 5},p指针指向二维数组的首地址,p[0]

相当于*(p+0),即a数组的第一个元素。

还有要注意二维数组的某一元素的随机读取:

在这里插入图片描述

1.23 二维数组的动态声明

在这里插入图片描述

注意,当动态声明数组的时候,数组相当于一个链表,因为数组的a[k]都是一个int*,所以动态申请的二维数组的元素不是连续的,所以我才说相当于一个链表。

1.24 宏定义中 do{ }while(0)

在宏定义中,经常会看到do{ } while (0)定义的形式,比如:

#define __set_task_state(tsk, state_value)      \
    do { (tsk)->state = (state_value); } while (0)

看起来多此一举,可实际上采用do{}while(0)的形式保证了宏定义不会受到大括号、分号的影响,使宏定义总是按照你期望的方式运行

其中,do{}保证了裸机能够被看作一个整体执行,while(0)保证了只执行一次。

参考:https://www.cnblogs.com/lanxuezaipiao/p/3535626.html

1.25 find 命令

详解:http://c.biancheng.net/view/779.html

find用来搜索文件,可以按照:权限、文件名、文件大小、文件时间、inode号、所有者等来搜索文件。

但是find是直接在硬盘中进行搜索的,如果指定范围过大,就会消耗较大的系统资源可能导致服务器压力过大。

命令格式:

[root@localhost ~]# find 搜索路径 [选项] 搜索内容

find有两个参数:

  • 第一个参数指定搜索路径
  • 第二个参数指定搜索内容

选项如下:

  • -name: 按照文件名搜索;
  • -iname: 按照文件名搜索,不区分文件名大小;
  • -inum: 按照 inode 号搜索;
  • -size[±]大小:按照指定大小搜索文件;
  • -atime [±]时间: 按照文件访问时间搜索;
  • -mtime [±]时间: 按照文改时间搜索;
  • -ctime [±]时间: 按照文件修改时间搜索;
  • -perm 权限模式:査找文件权限刚好等于"权限模式"的文件;
  • -perm -权限模式:査找文件权限全部包含"权限模式"的文件;
  • -perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件;
  • -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件;
  • -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件;
  • -user 用户名:按照用户名査找所有者是指定用户的文件;
  • -group 组名:按照组名査找所属组是指定用户组的文件;
  • -nouser:査找没有所有者的文件;
  • -type d:查找目录;
  • -type f:查找普通文件;
  • -type l:查找软链接文件;
  • -a:and逻辑与;
  • -o:or逻辑或;
  • -not:not逻辑非;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值