指针及数组作业【2】

1.动态内存分配流程

首先用malloc()函数申请和开辟一个空间 ,然后用一个p指针指向这个空间

开辟完空间且有指针指向这个空间之后,我们要使用这个空间

使用完空间之后我们需要去释放这个空间,将这个空间归还给系统

p指针指向的空间释放完之后,我们习惯性的将p指针指向NULL(将p指针指向的对象置为空),让其变成空指针而非野指针,防止程序员再次访问和操作它的时候出现BUG

注意!!p指针置为NULL(空)这个操作是不会自动发生的,是需要我们手动置为空的)


1.函数的返回类型和返回值的类型一致

2.数组的地址只能用数组地指针来承接

3.数组指针类型: int (*) [ ] (最大的辨识物就是这个[ ]下标引用操作符)

4.函数指针类型:int (*) ( int ) (最大的辨识物就是后面这个括号加函数返回类型)

5.一个数组开辟一个独属于自己的空间,从内存的角度也就是计算机的角度来看,任意两个数组的内存空间不重合,所以任意两个数组不相等


时间复杂度(简述)

O(1) --- 指查找元素的最大次数与数组长度无关

O(n) --- 查找元素的最大次数与数组长度有关,n的大小等于数组中总元素的个数n与在数组中查找元素的最大次数的幂 a 的组合,即为 n^a

如我们要查找的最大次数为3n,这个最大次数的幂是1 , 数组的总元素个数是n ,则时间复杂度是 O(n^1) ,若最大查找次数是 3n^2,则时间复杂度是 O(n^2) ..... 依此类推

当查找元素的次数小于数组总元素的个数时,上面的结论不适用,但可知此时的时间复杂度比上面的时间复杂度都小。


杨氏矩阵的查找方法(利用递增的特性直接判断一行或一列是否符合要求),不符合就直接删除,符合就不删除

 


在函数中,如果碰到return就会直接让函数返回值,并且不会再去执行return下面的语句,且return一次只能返回一个值

如下面这一段代码 

传地址可以让函数直接访问内存,修改内存中的量,这样就可以实现让函数去修改函数外的值

指针很有用,因为我们可以通过指针直接访问内存

通过指针可以在一个函数内直接修改另一个函数的值

指针允许我们呢通过它来到对应内存空间中直接修改指针所指向的数据,数据在内存空间中被修改之后,无论是谁,啥时候来,这个数据都是被修改之后的模样。


 上面那个是数组中的字符串,是可以修改的,下面那个p指向的是一个常量字符串,是不可以修改的!


 strcat的功能是在一个字符串后面追加一个字符串

str[10] = { 'a' ,'b' ,'c'  }

如 strcat( str , "bc" )  ---- 使用了之后我们以字符串的形式打印str的时候,我们得到的打印结果是

abcbc

 strcat ( ) 函数的格式: strcat (被补充的字符数组(这里不能直接写字符串,因为直接写的字符串在常量区,是无法更改的),用来补充的字符串)

ps: strcat ( ) 函数是不支持让一个字符串补充自己的克隆体的,如 strcat (a, a)这是不允许的

但是也不是没有办法来实现复制可克隆体这个目的:

实现方法是使用 strncat ( )这个函数 --- 格式 : strncat (被添加的字符数组 ,用来添加的字符数组的克隆体/克隆字符串 , 以及最重要的一个用来告诉计算机取克隆体的多少个字符添加到字符数组中的整型参数  )


如和判断一个字符串是不是另一个字符串的子串呢?

用库函数 strstr (左边参数是我们认为的字符全集str1,右边参数是我们认为的字符子集str2) 来进行判断

如果判断str2是str1的子集的话,strstr就会返回str2在str1这个全集处的位置

即1.找到str2在str1处的位置

2.返回str2在str1中的地址,即str2在str1中的首字符的地址

如上面这个返回的地址就是str1中的str2的首字符B的地址 

找不到的话就返回一个空指针

空指针:NULL

无类型指针 void


逻辑判断也有输出结果:在判断为真的时候输出1,为假的时候输出0

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值