字符串学习(2)

本文深入探讨了数据结构中的核心概念,如串长度、字符串存储方式、Grep命令使用、栈的操作特性、静态链表的特点及应用、数组与链表的访问方式等,并解析了不同数据类型的存储位置及内存分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、串长度是指串中所有字符的个数。

字符串的两种基本存储方式是顺序存储和链式存储,字符串或串是由零个或多个字符组成的优先序列,是编程语言中表示文本的数据类型。通常串的整体作为操作对象。

 

2、在给定文件中查找与设定条件相符字符串的命令为?grep

Grep命令作为一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称 Global Regular expression print,表示全局正则表达式版本,它的使用权限是所有用户。  Find只能匹配单个字符。

Grep查找字符串,find用来查找字符。

 

3、

char *p1=”123”, *p2=”ABC”,str[50]=”xyz”;

Strcpy(str+2,strcat(p1,p2));

Printf(“%s\n”,str);

程序输出出错。

分析:p1和p2都指向常量字符串,在常量区,所有不能对其进行操作。常量指针,可以改变它指向的地址,不能改变指向的内容。

 

4、设栈的初始状态为空,当字符序列a3_作为栈的输入时,输出长度为3的且可以用作C语言标识符的字符串序列有3个。

分析情况:

思路一) 共有 a3_ 、a_3、 3a_、3_a、_3a,去掉以3开头的2个,所以有3个。

思路二)卡特兰数公式h(n)=C(2n,n)/(n+1),适用于出栈情况求和。则所有输出总数为5次,去掉不符合情况的2次,剩下3个序列。

 

5、静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。

(静态链表是用数组存储节点数据,模拟链表实现,但是没有用到指针。每个数组节点包括data域和cursor域。Data域存储数据,cursor指明下个元素在数组中的下标。)

存取第i个元素时,需要从头遍历到i-1和元素,由第i-1个节点的cursor,才能知道第i个元素存储的位置,因此 与i相关。

使用数组对元素进行存储,在定义时大小已经确定。

插入和删除操作无需移动元素,只需要修改cursor游标的值即可,就像修改动态链表中的指针一样。

 

6、栈具有记忆功能。因为栈是后进先出,可以保留前面的元素,所以称其有记忆功能。

 

7.数组可以直接通过下标得到存储的值,因此支持随机;访问链表是链式存储结构时无法支持随机访问,要访问一个指定位置元素,必须从头开始做指针移到。

哈希表支持直接通过关键码得到值,其实数组就是一种哈希表,下标就是哈希码,通过下标直接得到值,因此哈希表肯定需要做范围检查,也有办法做范围检查。

 

8、

初始化数据段存放初始化的全局变量(全局静态变量);

非初始化数据段存放未初始化的全局变量;

栈存放自动变量和函数调用信息;

堆存放动态存储数据;

 

a全局变量,放在全局区;

*str是常量字符串放在文字常量区,str放在全局区;

*b 和 *obj对象是new出来的,放在堆区,指针b和obj放在栈区;

c,obj2,aa是局部变量,lhs,rhs是函数参数值,都放在栈区。

 

9、二维数组必须制定列的数量,行的数量可以不指定。

 

10、32位操作系统中,定义**a[3][4],则变量占用内存空间为48

分析:a是一个数组,大小为3*4,数组中存放着指针的指针,在32位系统下,指针大小为4B,所以结果为4*3*4=48.

 

分析二: **a[3][4]:这是个3行4列的指向指针的指针数组,也就是说3行4列中存储的都是指针,那么所占内存空间是:3*4*4=48

 

分析三:指向数组的指针是4字节,如果是指向数组的指针应该是(*a)[3][4];

(**a)[3][4]:指向数组的指针的指针,也是4字节。这里是指针数组,也就是12*4=48;

 

11、静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出。

 

Static表示“全局”、“静态”的意思,用来修饰成员变量和成员方法,也可以形容静态static代码块,但是java语言中没有全局变量概念。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只有这个类被加载,java虚拟机就能根据类名在运行时数据区的方法区内找到它们。因此static对象可以在它的任何对象创建之前访问,无需引用任何对象。

静态全局、全局、静态局部在java中都一个意思。

 

可重入:指发生“当一个函数正执行到中间某步时,另一道程序又从该函数开头开始执行”的情况,函数的几个不受影响。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值