2024年最全刨析《C语言》【进阶】付费知识【二,零基础入门学习前端

前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

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;

int i;

};




### []( )修改默认对齐数



之前我们见过了 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数。



//例如:

struct S1

{

char c1;

int i;

char c2;

};

struct S2

{

结尾

正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

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

前端学习书籍导图-1

;

};




### []( )修改默认对齐数



之前我们见过了 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数。



//例如:

struct S1

{

char c1;

int i;

char c2;

};

struct S2

{

结尾

正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

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

[外链图片转存中…(img-sDC7NbD5-1715051549589)]

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值