C++ POINTERS (2025) - What is a void pointer? (for beginners) PROGRAMMING TUTORIAL

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024
  • Void pointer in C++ is a general-purpose pointer, which means a special pointer that can point to object of any type. It is a typeless pointer also known as generic pointer.
    But void pointers have certain limitations as well. They cannot be dereferenced directly. In this video, I'm explaining how void pointers are used in C++ on a simple, beginner-friendly example.
    📚 Learn how to solve problems and build projects with these Free E-Books ⬇️
    C++ Lambdas e-book - free download here: bit.ly/freeCpp...
    Entire Object-Pascal step-by-step guide - free download here: bit.ly/FreeObj...
    🚀📈💻🔥 My Practical Programming Course: www.codebeauty...
    Experience the power of practical learning, gain career-ready skills, and start building real applications!
    This is a step-by-step course designed to take you from beginner to expert in no time!
    💰 Here is a coupon to save 10% on your first payment (CODEBEAUTY_YT10).
    Use it quickly, because it will be available for a limited time.
    Follow me on other platforms:
    Instagram 📸 - / truecodebeauty
    Twitter 🐦- / truecodebeauty

Комментарии • 153

  • @CodeBeauty
    @CodeBeauty  3 года назад +17

    📚 Learn how to solve problems and build projects with these Free E-Books ⬇️
    C++ Lambdas e-book - free download here: bit.ly/freeCppE-Book
    Entire Object-Pascal step-by-step guide - free download here: bit.ly/FreeObjectPascalEbook
    🚀📈💻🔥 My Practical Programming Course: www.codebeautyacademy.com/
    Experience the power of practical learning, gain career-ready skills, and start building real applications!
    This is a step-by-step course designed to take you from beginner to expert in no time!
    💰 Here is a coupon to save 10% on your first payment (CODEBEAUTY_YT10).
    Use it quickly, because it will be available for a limited time.

  • @remysalone
    @remysalone 2 года назад +15

    I am now a university freshman from China majoying in Network Security. I started to learn C++ when I was in high school but gave up due to its complex concepts. Now that we have to learn C++ in my major, I turned to this video to help. Your explaination is really clear and the words in this video is amazingly understandable for a Chinese whose mother tongue is not English. Really thanks you a lot and wish your channel will become better.

  • @francescofaccodelagarda5408
    @francescofaccodelagarda5408 3 года назад +33

    Thank you SOooooo much, Saldina!!! I used to be a wizard in C++ (back in the 1990's ..) ... havent used it for 30 years and you are the best "refresher" I've seen! A pleasure to follow you: charming, whitty, clear .. well done!

  • @hussainaqeel7371
    @hussainaqeel7371 3 года назад +24

    Hey guys! I have a tip, instead of passing a type parameter and checking for different possibilities with a switch statement, you can use a C++ "template", they allow you to pass type arguments to functions!
    template // `T` will be the data type
    void print(void *ptr)
    {
    cout

    • @dealvin
      @dealvin 3 года назад

      The "" Is redundant, compiler understand types. Good advice, bro

    • @AK-ey5ms
      @AK-ey5ms 2 года назад +11

      Why would you do something like this?
      template
      void print(T* in_ptr) {
      std::cout

    • @kolbe6436
      @kolbe6436 2 года назад

      Nice

  • @Apost821
    @Apost821 8 месяцев назад +1

    I am from Ethiopia .
    I am second year Hawassa university student .I woud like to say , thank you for your great helping for us.I get great knowledge from you

  • @stefanfrei6199
    @stefanfrei6199 3 года назад +8

    i assume this code is only theoretical, and in production you would use function overloading?
    void print(int* val) {
    cout

  • @TehCruiser
    @TehCruiser 3 года назад +4

    We can simply use the keyword auto to print a pointer of any type, like:
    #include
    void printPtr(auto* ptr)
    {
    std::cout

    • @cmnikola
      @cmnikola 11 месяцев назад +1

      i been trying to find this comment!

    • @fatimam-z8d
      @fatimam-z8d 11 месяцев назад +1

      #include
      template
      void printPtr(T* ptr)
      {
      std::cout

  • @roninhacked2045
    @roninhacked2045 4 года назад +23

    hey code beauty
    your tutorials are so understandable
    so please can you bring about competitive programming course

  • @justbake7239
    @justbake7239 2 года назад +3

    Why haven't I seen this channel sooner. Your tutorials are so helpful thank you!!!!

  • @unisonunison9789
    @unisonunison9789 Год назад

    Hey nice video!
    i just wanted to mention that on 8:34 i had problems with understandings the difference between *((int*)ptr) and (int*)ptr.
    becasue it was too fast for me. But in the end i unnderstood it. Here is a code for anyone who are still struggling:
    int number = 42; // Initialize an integer variable 'number' with the value 42
    void* ptr = &number; // 'ptr' points to the address of 'number'
    int* intPtr = (int*)ptr; // We cast 'ptr' to an 'int*' pointer
    int value = *intPtr; // We dereference 'intPtr' to obtain the value '42'
    so how i understood it is that *((int*)ptr) casts the datatype to an intiger and to acces the value you need to write the * ((.... in the end

    • @lukesky9627
      @lukesky9627 10 месяцев назад

      *((int*)ptr) means its cast into an int pointer (the inner parentheses containing "int*") and the entire thing is dereferenced, thats why there are the outer parentheses and the "*" at the beginning. Write it out to the console and you will see the difference between *((int*)ptr) and (int*)ptr.

  • @WolfsdenxD
    @WolfsdenxD 3 года назад +2

    Thank you so much, you've taken away a lot of my confusion about pointers.

  • @ramazanhusaini3531
    @ramazanhusaini3531 3 года назад +1

    i do appreciate your work for making clear and understandable videos about pointers

  • @hama_kurdish2434
    @hama_kurdish2434 Год назад

    You can use template after that create a function to hold every data type.

  • @neck-o
    @neck-o Год назад

    I just realized that you don't even need a switch statement to determine the datatype of the passed pointer. Just declare a template above the function: template , and use whatever datatype passed with the function as the pointer to cast as: func(&anInteger), then inside the function: cout

  • @RustyRustacean
    @RustyRustacean 4 года назад +5

    Hi,
    I learned a lot about C++... thanks!
    But i don't get something, how can everything I learned be useful, could you make some mini-projects about real world applications in the most realistic way possible (So that I get the idea about what is it to work like a C++ programmer)

  • @hell0kitje
    @hell0kitje 4 года назад +4

    Im struggling with pointers and arrays, hope it will be covered in future

    • @CodeBeauty
      @CodeBeauty  4 года назад +1

      Yep, I will make a video about that as well 😊

  • @dealvin
    @dealvin 3 года назад +2

    Struct and void pointers are powerfull!

  • @jason_skillman
    @jason_skillman 3 года назад +1

    Thanks that cleared up all of my questions on void pointers 🎉👍

  • @noonegates2328
    @noonegates2328 3 года назад +2

    isn't it better to use:
    case 'i': cout

    • @hydencodecamp
      @hydencodecamp 8 месяцев назад

      That's correct. While both approaches technically accomplish the same task, using static_cast is generally preferred in modern C++ code because it provides stronger type checking and better readability. It's a good practice to use the type-safe features provided by the language whenever possible.

  • @alexanderriverasandoval3949
    @alexanderriverasandoval3949 3 года назад +2

    You are very good at teaching . Thanks a lot

  • @mytuberam
    @mytuberam 3 года назад +2

    Is it possible to avoid the 2nd argument 'char type' and instead get the type from the first argument somehow?

  • @muadrico
    @muadrico 4 года назад +2

    Looks more like a C approach than a C++ solution. In C++ you would make “print” a templated function or use a std::variant as the type. Usually you don’t need “void*” in modern C++. Also, using C style typecasting usually is a code smell in C++.

    • @Novecento
      @Novecento 3 года назад +2

      Yeah you're right, but I think the point of this video is to teach beginners what void pointers are and how to use them and I think she did a great job at that in only 15 minutes. Void pointers are just a tool, a legacy tool but I think beginners should know them because probably they'll have to deal with legacy code more often than they would think.

    • @muadrico
      @muadrico 3 года назад

      @@Novecento Agreed.

    • @carloni1997
      @carloni1997 3 года назад

      I agree that void pointers are not usually needed.
      However, I do wonder why you would call C style cast a code smell?
      If you know what you're doing, a cast is a cast.
      Right?
      char carr[4];
      int *ptr = (int*)carr;

    • @muadrico
      @muadrico 3 года назад

      @@carloni1997 It can lead weird behavior, when used for casting objects in a class hierarchy and the compiler can not spot the error whereas if you use the correct C++ cast, the compiler will tell you the error.
      Here is a nice article about the different kind of casts.
      arne-mertz.de/2015/01/a-casting-show/

    • @carloni1997
      @carloni1997 3 года назад

      @@muadrico I agree it can lead to weird behavior.
      Simplest possible weird thing would be:
      float fval;
      int *ptr = (int*)&fval;
      (*ptr) = 5;
      Weirdness here would come from a fact floats are stored differently than integers.
      I also like article you shared.
      Examples and explanations. Thank you. It was a worthy read.
      And it gave me a little bit to think, so with that in mind, I would say this:
      C++ casts are used for safety, since they can trow exceptions and compiler errors.
      But if you really know what you're doing, C style casts are totaly legit.
      And if you really, really know what you're doing, C style casts shouldn't lead to weird behavior.
      Oh, and my favorite part was: Downcasts in class hierarchies.
      P.S.
      B2* pb2 = (B2*)((void*)&d); gives me the same result as a static_cast

  • @kttthn
    @kttthn 3 года назад +1

    Thank you so much for your work!!!

  • @everline_builders
    @everline_builders 3 года назад +2

    Thank you! Excellent video! But can we use auto* in lieu of void* ?

  • @gusromul3356
    @gusromul3356 3 года назад +1

    girl, you rock! congrats to you and your team... if there is such

    • @CodeBeauty
      @CodeBeauty  3 года назад

      No team, only me 😅☺️ Thank you 🙏

    • @gusromul3356
      @gusromul3356 3 года назад +1

      @@CodeBeauty whoa... then you rock and roll ;)

  • @hefhef54321
    @hefhef54321 3 года назад +1

    Here's an alternative way for doing this but with generics and templates
    ```
    #include
    using namespace std;
    template
    void print(void* _ptr);
    int main()
    {
    int n = 5;
    char l = 'a';
    print(&n);
    print(&l);
    system("pause>0");
    }
    template
    void print(void* _ptr)
    {
    cout

  • @tayabfarooq7544
    @tayabfarooq7544 3 года назад +1

    @code beauty! in one of your videos you had shown the method of sorting variables inside an array ....... Kindly provide the link to this video as soon as you can.... I had ever watched it but now I could not find it!

  • @fadi0802
    @fadi0802 4 года назад +2

    Very well explained!

  • @sergio_sciuto_conti
    @sergio_sciuto_conti 3 года назад +2

    Very good explanation, brilliant!

  • @Dani-mp2we
    @Dani-mp2we 3 года назад +1

    using void pointers is a better solution than function overloading? in terms of performance

  • @JazzInATinCan
    @JazzInATinCan Год назад

    Have watched a couple of the pointers videos now - great content!

  • @matthewurke5192
    @matthewurke5192 4 года назад +1

    Hey, question. You said something about a logic error. But if you type out each case for each type, could the program run anywhere you need it to in your code, by reference the void code again at lets say line 300, and line 3000?

    • @CodeBeauty
      @CodeBeauty  4 года назад +3

      Yes, you can invoke "print" function as many times as you want. Are you familiar with the concept of functions? I did a short series about functions in C++, that can help you understand this better.
      And a logical error is related to the error that your compiler is not able to see, but it will cause your program to behave in an unexpected way.
      For example, a logical error can be if you try to calculate how many seconds there is in a day, and instead of calculating 24 (h) * 60 (min) * 60 (sec) you do something else. Your compiler will not know, but you will get the wrong result.

  • @dandon.3667
    @dandon.3667 10 месяцев назад +1

    You are the best teacher 💙💙

  • @kelvinwilliams2908
    @kelvinwilliams2908 3 года назад +1

    I have 2 questions - (1) On lines 4,5,7 & 8 you use "Ptr" but on line 10, you use "ptr", why? (2) At 5 mins into the video, you have 2 funtions, one for "int" and the other for "char" and when you run the program it outputs number 5 and letter a which is fine. Then around 11:30 mins into the video you have the "void function" which does the same thing - but the code for the two original functions is still there so how does the computer know which functions to use because now there are three functions to chose from. What is it that I have missed here?

  • @sv3glx
    @sv3glx 4 года назад +1

    Once again.. Awesome!

  • @projetistadegambiarras
    @projetistadegambiarras 4 года назад +3

    excelente tutorial muito bom .

  • @menu6750
    @menu6750 3 года назад +1

    great lesson..🙂
    Should i make "switch case" for every data types..i want to pass to the void pointer..

  • @jrdlcz
    @jrdlcz 10 месяцев назад +1

    Thank you for sharing this video!❤

  • @luser5381
    @luser5381 3 года назад

    Doubt 1: function overloading with different pointers in the signature?
    Doubt 2: Templates with pointers? like, say typename t which results in parameter void fn(t* var) ???

  • @sousavann
    @sousavann 2 года назад +1

    Thank you! It's easy to understand. Can you also make tutorial for different programming languages as well like Java, Python, Javascript, etc. ?

  • @AlexTrouman-oi1yp
    @AlexTrouman-oi1yp 11 месяцев назад

    in switch what about default !!!!!??

  • @mongalmoy_karmakar
    @mongalmoy_karmakar 10 месяцев назад

    Thank you so much for this amazing series of pointers.

  • @paulcook748
    @paulcook748 4 года назад +3

    Nice and clear, but honestly, void pointers are not a "beginners" subject in C++ because the only time one should be using them is in highly advanced situations.
    I appreciate you are trying to construct an example that is easy to follow, but it concerns me that a beginner might interpret this as a good way to design code. This is the absolute antithesis of C++'s approach to strong typing.

  • @WistrelChianti
    @WistrelChianti 3 года назад +2

    singing "it's my memory and I'll cast it to what I want to" (referencing the Leslie Gore song)

  • @softwaresolutions3111
    @softwaresolutions3111 2 года назад

    Love the way you teach

  • @liquidred257
    @liquidred257 3 года назад

    is the break command in the switch necessary, because won't type fail the other cases if it passes one?

  • @typedef_
    @typedef_ 4 года назад

    Is it good practice to use pointers in C++ ? To me, an "object" implicitly removes the need for pointers. I've never used C++, but I have used C# a lot and never got in a situation where a pointer was needed...

  • @ravirajchilka
    @ravirajchilka 2 месяца назад

    I would suggest to use
    template
    void printData(const T &value) {
    std::cout

  • @tuazulyrojoeljean
    @tuazulyrojoeljean Год назад

    Thanks, this vid is actually so well explained

  • @yahiamohamed4764
    @yahiamohamed4764 2 года назад

    you can use an auto type pointer so it can handle any type

  • @remimonsel9944
    @remimonsel9944 2 года назад

    instead of using a void pointer, can't we use a template and typedef to create a sample function ? or my idea is not so good for some reasons ?

  • @emaus8344
    @emaus8344 3 года назад

    I was trying to find out what is IntPtr datatype and came upon your video. Is function that you wote explanation for IntPtr or have I got something wrong?

  • @aditisingh4952
    @aditisingh4952 3 года назад

    Hey Saldina ! why did you make the type char??

  • @StabbyMacStabStab
    @StabbyMacStabStab 3 года назад

    Am I wrong for thinking that it would be better to just use a template function to deal with the different data types being passed in instead of having to use a void pointer with a bunch of switch statements?

  • @bigmac963
    @bigmac963 4 года назад

    Hi, please can you do a video tutorial on how to build a simple game in c++ console. Thanks!

  • @AviPars
    @AviPars 2 года назад

    Do you have a video on fn pointers

  • @lucianbetke
    @lucianbetke 3 года назад

    Hübsch und klug, gefällt mir.

  • @adrienc8716
    @adrienc8716 4 месяца назад

    very clear ! Thank u very much

  • @michaeleddy927
    @michaeleddy927 Год назад

    What is the switch function for?

  • @alejandromackay3074
    @alejandromackay3074 Год назад

    Break is missing in the switch-case structure.

  • @serollakrish3833
    @serollakrish3833 2 года назад

    hello mam can explain about null pointers, where and when we use null pointer, main reason to use null pointer ...... plz mam

  • @fatiqhussnain8399
    @fatiqhussnain8399 2 года назад +1

    saldina ! i appreciate your work
    but plz make a detailed video on link lint in c++

  • @sheikharooj5762
    @sheikharooj5762 4 месяца назад

    You are an asset .. thank you so much❤

  • @Wexler111
    @Wexler111 2 года назад

    Huge thanks for these videos

  • @viniciusmelo984
    @viniciusmelo984 3 года назад

    11:28 I believe the "break;" statement is missing

  • @saifmos6516
    @saifmos6516 3 года назад

    but why when i do extra case 'd':cout

  • @agnisri1201
    @agnisri1201 11 месяцев назад

    Finally i rewire my brain ❤

  • @rrokluli7392
    @rrokluli7392 4 года назад +1

    It would be better if you use a Dark Theme for VS

    • @CodeBeauty
      @CodeBeauty  4 года назад +2

      Some people told me that they have to watch the videos on lover resolutions and that it is much easier to see the code when it is on a light background instead of a dark one. In regular life, I prefer a dark one as well, but because of the reason that I mentioned I use light for videos 😊

  • @Peter-lq1xj
    @Peter-lq1xj 4 года назад +2

    Amazing

  • @SulixD
    @SulixD 3 года назад

    this is more C style really than C++ , in the future consider teaching templates to solve this same problem where you used void pointer.

  • @AbdulRehman-ch4kw
    @AbdulRehman-ch4kw 3 года назад

    Thanks... This was Very Useful :)

  • @imtiyazalam_IIItian
    @imtiyazalam_IIItian 2 года назад

    thank you maam for such nice explanation....love from INDIA

  • @MihaiDumitrescu12
    @MihaiDumitrescu12 3 года назад +7

    As a joke I only understand "avoid pointer" :)

  • @kelvinwilliams2908
    @kelvinwilliams2908 3 года назад

    Regarding my two questions 1 day ago I have now worked out the answer to my second question but I am still unsure about the first.

    • @cmnikola
      @cmnikola 11 месяцев назад

      bro its not important name, two years have passed, how are you?

  • @markosbasha6387
    @markosbasha6387 3 года назад

    It’s Christmas time, Abebe and Alemu woke up one day and found N presents under their Christmas tree, each present has a unique number from 1 to N, since Abebe love even numbers and Alemu love odd numbers they decided that Abebe will take all the presents that have an even number written on it and Alemu will take all the presents that have an odd number written on it, but they don’t know how many presents they will get each and they are both lazy to count the presents right now so they asked for your help to tell them how many presents each of them will get using a function called “Christmas()“...please help me with this question ....U are my Excellent lecture ❤❤

  • @vivekdixit9208
    @vivekdixit9208 4 года назад +3

    I have just started to learn C++ from your first video .. I know some basics of C so can guide me the sequence of your tutorials and how much days it will take to understand the codes written in C++. It will help a lot .. thanks in advance and thanks for doing such great videos .

    • @CodeBeauty
      @CodeBeauty  4 года назад +8

      In my opinion, in programming, there is no final goal to achieve where you can say "Okay, I know enough, I'm good now"
      This is the kind of profession where you learn every day. So take it easy, be consistent, but don't be hard on yourself, and enjoy the process of learning each day. Before you expect it, you'll be able to look back and say "Well, I feel like reading/writing code became like reading/writing English"
      I remember a few years ago when reading code felt like trying to understand hieroglyphs. I couldn't wait to become "good" and not have to struggle with that anymore, and then I decided to stop stressing about it and focus on improving things that I felt were my weak spots, and over time, that feeling of not understanding code or not being able to write it just disappeared.
      I can't tell you how long it will take, I don't think anyone can, but I can tell you that if you invest 1-2 hrs every day for a year, you'll be able to see huge progress. And you can even take weekends off. 😊

  • @lizzy_trevisan
    @lizzy_trevisan 7 месяцев назад

    did we forget the break between cases?

  • @miguelferreira-xy7gq
    @miguelferreira-xy7gq 2 года назад

    merci thank you

  • @onurolce
    @onurolce 4 года назад

    11:32 I did not watch after that second. I guess you need to finish CASE with BREAK; and also you also need to add DEFAULT in SWITCH function. At lease we are doing it in Java :)

    • @naimcool36
      @naimcool36 4 года назад +1

      in c++ u dont need default

    • @CodeBeauty
      @CodeBeauty  4 года назад +3

      You will not get an error if you don't have a "default", but if you want to cover some default situation, that is what "default" is meant for 😊

    • @onurolce
      @onurolce 4 года назад +1

      @@CodeBeauty "if any of these conditions not happens then do it..." I guess you are telling this to me in your style, I like it :)

  • @zareenabanu6425
    @zareenabanu6425 3 года назад

    11:27 question
    Answer: Break;

  • @madhusankawijerathne8435
    @madhusankawijerathne8435 Год назад

    Thank you beauty!

  • @Fullstackdev-
    @Fullstackdev- 2 года назад

    thanks

  • @yankobzykant5579
    @yankobzykant5579 2 года назад

    break statement was missing inside switch case

  • @isajameh2789
    @isajameh2789 3 года назад

    Thank you beauty.

  • @findikbabi
    @findikbabi 4 года назад +2

    11:25 We are missing a break.

    • @CodeBeauty
      @CodeBeauty  4 года назад +1

      Yep. Glad to see that you are still here 🤗

  • @hoangphan2498
    @hoangphan2498 3 года назад

    nice
    tks a lot

  • @ashenhewavithana9479
    @ashenhewavithana9479 3 года назад

    Hi, this is my code for printing out a letter using functions and pointers, but I am getting an error - "invalid conversion from 'const char*' to 'char*' -fpermissive". Could you please help me solve this. Thanks
    #include
    using namespace std;
    void printNumber(int* numberPtr){
    cout

  • @arisgacha296
    @arisgacha296 Год назад

    very good.

  • @Superman-tm8cp
    @Superman-tm8cp 9 месяцев назад

    Why can't we use templates instead of switch? It works better and takes less time to write the code

  • @atultiwaree6023
    @atultiwaree6023 3 года назад

    It's Break & Default.. Hope So :)

  • @hbbss8684
    @hbbss8684 3 года назад

    why not use a template instead?

  • @muhammadumernadeem725
    @muhammadumernadeem725 4 года назад +1

    11:25 Break statement is missing

  • @tvt2546
    @tvt2546 3 года назад

    save life C++ channel

  • @huraqandavid6727
    @huraqandavid6727 2 года назад +1

    The part missing in the case is "break;"😅. Im not sure xD let me continue to video

  • @sakthivigneshvar4428
    @sakthivigneshvar4428 4 года назад +1

    Mam break keyword is missing

    • @CodeBeauty
      @CodeBeauty  4 года назад +1

      Yep, that is the correct answer. 😊

  • @muhammadmuiz1487
    @muhammadmuiz1487 3 месяца назад

    Break point is missing

  • @nikhilkumar-ww4wh
    @nikhilkumar-ww4wh 3 года назад

    i love u maam

  • @chesshooligan1282
    @chesshooligan1282 3 года назад +2

    The stress of the word "parameter" goes on the second syllable. I've learned a few things from you, so it's only fair you learn something from me.

    • @CodeBeauty
      @CodeBeauty  3 года назад +2

      I already have a few filmed videos where I probably pronounce it the wrong way, but I'll try to fix that pronunciation bug in the future vidios, and say pəˈramədər instead. 😁😅
      Thanks! 🤗🤗

    • @chesshooligan1282
      @chesshooligan1282 3 года назад +1

      @@CodeBeauty I'm British, so if you're going to pronounce it properly, I'd rather you pronounce it 100% properly, that is, the way it's written, with a t. Oh, I forgot, the word "address" also has the stress on the second syllable.
      Great tutorials, by the way. Thanks.

  • @dragone521
    @dragone521 10 месяцев назад +1

    Break;

  • @fatemeetsluck
    @fatemeetsluck 3 года назад

    >using C style cast instead of reinterpret_cast
    >not using enum for second parameter.
    Please don't write code like this in production. Also with templates you can pass types as arguments.