2024年最新刨析《C语言》【进阶】付费知识【二(1),hashmap的实现原理面试怎么回答

css

1,盒模型
2,如何实现一个最大的正方形
3,一行水平居中,多行居左
4,水平垂直居中
5,两栏布局,左边固定,右边自适应,左右不重叠
6,如何实现左右等高布局
7,画三角形
8,link @import导入css
9,BFC理解

js

1,判断 js 类型的方式
2,ES5 和 ES6 分别几种方式声明变量
3,闭包的概念?优缺点?
4,浅拷贝和深拷贝
5,数组去重的方法
6,DOM 事件有哪些阶段?谈谈对事件代理的理解
7,js 执行机制、事件循环
8,介绍下 promise.all
9,async 和 await,
10,ES6 的 class 和构造函数的区别
11,transform、translate、transition 分别是什么属性?CSS 中常用的实现动画方式,
12,介绍一下rAF(requestAnimationFrame)
13,javascript 的垃圾回收机制讲一下,
14,对前端性能优化有什么了解?一般都通过那几个方面去优化的?

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

printf("%d\n",sizeof(&arr));//4/8

printf("%d\n",sizeof(&arr +1));//4/8

printf("%d\n",sizeof(&arr[0]+1));//4/8



return 0;

}




![请添加图片描述](https://img-blog.csdnimg.cn/bcb957342d5e45ea9a64d320917051a2.png)  

![请添加图片描述](https://img-blog.csdnimg.cn/37c407ceacd6453593a304cd993b7dae.png)



int main()

{

int a[3][4] = { 0 };



printf("%d\n", sizeof(a));//48 = 3*4*sizeof(int)

printf("%d\n", sizeof(a[0][0]));//4 - a[0][0] - 是第一行第一个元素

printf("%d\n", sizeof(a[0]));//16

printf("%d\n", sizeof(a[0] + 1));//4 解释:a[0]作为数组名并没有单独放在sizeof内部,

								//也没取地址,所以a[0]就是第一行第一个算的地址

								//a[0]+1,就是第一行第二个元素的地址

printf("%d\n", sizeof(*(a[0] + 1)));//4 - 解释:*(a[0] + 1)是第一行第二个元素



printf("%d\n", sizeof(a + 1));//4 - 解释:a是二维数组的数组名,并没有取地址

//也没有单独放在sizeof内部,所以a就表示二维数组首元素的地址,即:第一行的地址

//a + 1就是二维数组第二行的地址



printf("%d\n", sizeof(*(a + 1)));//16 解释:a+1是第二行的地址,所以*(a+1)表示第二行

//所以计算的就是第2行的大小



printf("%d\n", sizeof(&a[0] + 1));//4 解释:a[0]是第一行的数组名,

//&a[0]取出的就是第一行的地址,&a[0]+1 就是第二行的地址



printf("%d\n", sizeof(*(&a[0] + 1)));//&a[0]+1 就是第二行的地址

//*(&a[0]+1) 就是第二行,所以计算的第二行的地址



printf("%d\n", sizeof(*a));//16 解释:a作为二维数组的数组名,没有&,没有单独放在sizeof内部

//a就是首元素的地址,即第一行的地址,所以*a就是第一行,计算的是第一行的大小



printf("%d\n", sizeof(a[3]));//16 解释:a[3]其实是第四行的数组名(如果有的话)

//所以其实不存在,也能通过类型计算大小的

printf("%d\n", sizeof(a[-1]));



return 0;

}




[]( )strlen

------------------------------------------------------------------



> strlen:是求字符串长度的,只能对字符串长度(库函数-使用得引用头文件)



#include<stdio.h>

#include<string.h>

int main()

{

char arr[]={'a','b','c','d','e','f'};



printf("%d\n",strlen(arr));//随机值  -遇到‘\0’结束

printf("%d\n",strlen(arr+0));//随机值

//printf("%d\n",strlen(*arr));//err

//printf("%d\n",strlen(arr[1]));//err

printf("%d\n",strlen(&arr));//随机值

printf("%d\n",strlen(&arr+1));//随机值- 6

printf("%d\n",strlen(&arr[0]+1));//随机值- 1



return 0;

}




> 因为strlen只对字符串求长度,对字符会产生随机值



[]( )指针

==============================================================



### []( )指针变量的大小



32位计算机系统 整形指针占4个字节,实参传字符形参也是4个字节



> void test1 (char ch)//char \*ch  

> {

> 

> ```

>  printf("%d\n",sizeof(ch));//4个字节,因为传入的是字符的首地址,也就是指针char *ch ,指针长度为4,所以char字符类型的传参是传的指针字节

> 

> ```

> 

> }  

> char arr\[10\]={0};  

> printf(“%d\\n”,sizeof(char));//10  

> test1(ch);//字符数组首元素



*   [ ]  只要在32位操作环境下,不管是什么类型,都是4个字节



![请添加图片描述](https://img-blog.csdnimg.cn/801c032f8f8340a7bb1069f5d54dc31d.png)



*   [ ]  在64位环境下



![请添加图片描述](https://img-blog.csdnimg.cn/78dad213281c426c88bbd9b2026bb1a1.png)



### []( )声明指针



int\* a,b,c;  

事实上只声明了变量a是指针类型  

如果要声明三个指针:  

int \*a ,\*b, \*c;



![请添加图片描述](https://img-blog.csdnimg.cn/5cc3bcb452d74d5b939854fd22528ade.png)



[]( )结构体

===============================================================



1.  ​ . :结构体变量.成员

    

2.  ​ -> :结构体指针->成员

    

    ![请添加图片描述](https://img-blog.csdnimg.cn/27095647d5a94e49b3aa37347737681c.png)

    



#include<stdio.h>

#include<string.h>

struct Book

{

char book_name[20];

int price;

};

int main()

{

struct Book b={"c语言程序设计",55};

struct Book* p = &b;

//更改价格

(*p).price=19;//等同于p->price

printf("%d\n",b.price);



//更改书名

//使用库函数字符串拷贝函数

//b1.name="c++";//error

strcpy(p->book_name,"C++");//因为book_name是字符型的数组名,数组本身是个地址,而price是变量

printf("%s\n",(*p).book_name);



printf("%s\t %d\n",p->book_name,p->price);

printf("%s\t%d\n",(*p).book_name,(*p).price);//(*p).book_name,(*p).price等同于p->book_name,p->price

printf("%s\n",b.book_name);

printf("%d\n",b.price);



return 0;

}




### []( )数组元素地址



> 1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组  

> 2.&数组名,取出的数组的地址。&数组名,数组名表示整个数组。



除此1,2两种情况之外,所以的数组名都表示数首元素的地址



![请添加图片描述](https://img-blog.csdnimg.cn/23389c79574846db97cf71a6fe37521a.png)



[]( )字符串

===============================================================



### []( )字符串的比较



> stract(str1,str1); //err,因为自己追加自己会把’\\0’覆盖掉,导致没有一直都没有’\\0’反复循环



![请添加图片描述](https://img-blog.csdnimg.cn/d187056acad54f04ac7cad8b104e79c0.png)



不能用两个字符串比较两个字符串相等,应该使用字符串  

例:



char password[20]={0};

sacnf(“%s”,password);

//if(pwssword == “123456”)//err

if(strcmp(password,“123456”)==0)

printf(“相同”);




### []( )字符串的拷贝



把字符串拷贝到目标地址,调试我们发现,遇到’\\0’结束拷贝



//更改书名

//使用库函数字符串拷贝函数

//b1.name="c++";//error

strcpy(p->book_name,"C++");//因为book_name是字符型的数组名,数组本身是个地址



![请添加图片描述](https://img-blog.csdnimg.cn/df8b3017510d4516933cbe43a7f36e1a.png)



当拷贝的不是’\\0’结束,程序运行出错



![请添加图片描述](https://img-blog.csdnimg.cn/402c5584f38241799c43660ca0dcb2f2.png)



*   源字符串必须以 ‘\\0’ 结束。

*   会将源字符串中的 ‘\\0’ 拷贝到目标空间。

*   目标空间必须足够大,以确保能存放源字符串。

*   目标空间必须可变。

*   学会模拟实现。  

    **注意:源字符必须是字符数组或者是一个指向动态分配内存的数组的指针,不能使用字符串常量!**



[]( )结构体

===============================================================



### []( )内存对齐



总体来说:



> 结构体的内存对齐是拿空间来换取时间的做法。  

> 起。



> S1和S2类型的成员一模一样,但是S1和S2所占空间的大小有了一些区别。



//例如:

struct S1

{

char c1;

int i;

char c2;

};

struct S2

{

char c1;

char c2;

❤️ 谢谢支持

喜欢的话别忘了 关注、点赞哦~。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端校招面试题精编解析大全

结构体

===============================================================

内存对齐

总体来说:

结构体的内存对齐是拿空间来换取时间的做法。

起。

S1和S2类型的成员一模一样,但是S1和S2所占空间的大小有了一些区别。


//例如:

struct S1

{

char c1;

int i;

char c2;

};

struct S2

{

char c1;

char c2;

## ❤️ 谢谢支持

喜欢的话别忘了 关注、点赞哦~。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

> [外链图片转存中...(img-Ttzsg5I3-1715743087985)]
> 









  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值