我是靠谱客的博主 生动电灯胆,最近开发中收集的这篇文章主要介绍初学者是学习 C 语言还是 C++ 好?各有何利弊?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、从源码角度探讨C和C++的区别究竟多大

C是不是C++的子集这些概念都不重要,不管是自学C还是C++目的是什么?当然是拿来应用解决问题,在解决问题中体会每个知识点有什么用,单纯的看课本看视频是很难坚持下去的。至于C和C++先学哪个完全不用纠结,我自学C++的时候刚开始就没有永C++的面向对象,就是把C++当成C语言用。作为自学C++并成功转型的学长来看,你的目标是会用C或者C++,很多细枝末节都是在工作中遇到bug之后不断打磨的过程。下面就从常见的源码看一下,没有用到C++的class之前,C和C++区别完全忽略不计。

C语言里面比较有难度的也就是指针和链表了,那看一下下面用C和C++实现的链表几乎没什么区别。结论就是什么呢,不要纠结C和C++先学谁,重点是学数据结构与算法,重点是用编程解决问题。下面的代码直接copy到开发环境就可以运行,后面推荐的也有在线开发环境,超级方便。

  • C语言版本链表
#include <stdio.h> 
#include <stdlib.h>
struct listNode{
    int value;
    struct listNode *next;
};
  
int main() 
{ 

    struct listNode *head = NULL, *node = NULL, *pListEnd = NULL;
    
    node = (struct listNode *)malloc(sizeof(struct listNode));//开辟内存
    node -> value = 1;//节点的数据赋值
    node -> next = NULL;//节点的next指向NULL表示链表的尾节点
    head = node;//链表的头结点
    pListEnd = node;//链表的尾节点
    
    node = (struct listNode *)malloc(sizeof(struct listNode));
    node -> value = 2;
    node -> next = NULL;
    pListEnd -> next = node;//链表的尾节点的next指针指向新的node
    pListEnd = pListEnd -> next;//链表的尾节点指针后移到新的尾节点

    node = (struct listNode *)malloc(sizeof(struct listNode));
    node -> value = 3;
    node -> next = NULL;
    pListEnd -> next = node;//链表的尾节点的next指针指向新的node
    pListEnd = pListEnd -> next;//链表的尾节点指针后移到新的尾节点
    
    struct listNode *pNode = head;//定义和初始化访问链表的指针
    int indexNode = 0;
    while(pNode != NULL){
        printf("链表节点 %d 的值: %d n", indexNode, pNode -> value); 
        pNode = pNode -> next;//指针移动到下一个节点
        indexNode++;
    }
    
    return 0; 
}
  • C++版本链表
#include <iostream> 
using namespace std;

struct listNode{
    int value;
    struct listNode *next;
};
  
int main() 
{ 

    struct listNode *head = NULL, *node = NULL, *pListEnd = NULL;
    
    node = (struct listNode *)malloc(sizeof(struct listNode));
    node -> value = 1;
    node -> next = NULL;
    head = node;
    pListEnd = node;
    
    node = (struct listNode *)malloc(sizeof(struct listNode));
    node -> value = 2;
    node -> next = NULL;
    pListEnd -> next = node;
    pListEnd = node;

    node = (struct listNode *)malloc(sizeof(struct listNode));
    node -> value = 3;
    node -> next = NULL;
    pListEnd -> next = node;//链表的尾节点的next指针指向新的node
    pListEnd = pListEnd -> next;//链表的尾节点指针后移到新的尾节点
    
    struct listNode *pNode = head;
    int indexNode = 0;
    while(pNode != NULL){
        cout<< "链表节点 "<< indexNode << "的值: "<<pNode -> value <<endl; 
        pNode = pNode -> next;
        indexNode++;
    }
    
    return 0; 
}

 

2、C++软件工程师面试考什么

前面分析完C和C++的区别很容易发现,刚开始仅仅是入门编程而已,根本不用管面向对象还是面向过程,直接忽略这些高级概念,编程语言就是工具,比如英语也是工具,很多小伙伴儿不都是考个英语四六级很少看英文资料吗,这就完全体现不出来英语作为工具的重要性。我自学C++和数据结构与算法的时候遇到很多问题,查资料很难找到优质的,于是果断去Google检索英文资料,英文专业技术资料阅读比六级都简单,比SCI更简单。下面再聊一下C++软件工程师的面试考察什么,这对于学编程学什么就尤为重要了。

  • 快手的校招算法面试题,考察的是经典的字符串编辑距离,字符串编辑距离是什么问题呢,动态规划。字符串编辑距离也是用于评价两个字符串相似度的一种算法。

通过上面的一系列分析,结论是什么呢?就是C和C++的学习仅仅是编程学习的起点,学习C/C++主要的任务是学习数据结构与算法,数据结构与算法是独立于编程语言之外的东西。数据结构与算法一个重要的特点就是很难短时间学会,大量的刷算法题是学数据结构与算法最快捷的方法。数据结构与算法不仅仅是大厂重点考察的知识,小公司也热衷于考察,为什么呢,主要就是现在自学C++的非常多,直接考察数据结构与算法能力面试官可以最快地了解面试者的技术功底和潜力,以及自学能力。平时招聘C++软件工程师的时候,有的小伙伴儿项目经验是有一些,但数据结构与算法功底是真的非常不给力,map常用的插入、查找等操作的时间复杂度完全不知道。如果你自学C++扔在困惑学什么、数据结构与算法怎么学、校招如何进大厂等问题,推荐看一下这个资料。

最后,所有的C/C++学习方法归根结底就是敲代码,不停的敲代码就类似于打游戏升级,敲1000行和10000行代码对编程的理解是完全不同的。只有业务逻辑非常复杂的时候,代码不停的修改才能深刻体会到设计模式的重要性。当你真正每天开始敲代码的时候,其实你已经忘记编程有多难了。

最后

以上就是生动电灯胆为你收集整理的初学者是学习 C 语言还是 C++ 好?各有何利弊?的全部内容,希望文章能够帮你解决初学者是学习 C 语言还是 C++ 好?各有何利弊?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部