Тёмный
No video :(

What is the Difference Between a Pointer and a Reference C++ 

Paul Programming
Подписаться 82 тыс.
Просмотров 429 тыс.
50% 1

In this video I explain the difference between a C++ pointer and a C++ reference.
Donate - bit.ly/17vCDFx
STILL NEED MORE HELP?
Connect one-on-one with a Programming Tutor. Click the link below:
trk.justanswer...
:)

Опубликовано:

 

24 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 474   
@systemofapwne
@systemofapwne 2 года назад
In short: Pointers and references can be used to refer to data in memory, without copying the data to a new variable. That is efficient. While pointers can arbitrarily be changed to point to any memory addresses and need a dereferentiation in order to read the value, references do refer to a fixed location in memory and behave like normal variables (do not need dereferentiation), when one wants to read their value. However, since no data is copied from one var to another in either case, changes made to these memory locations will be present instantly for pointers and references.
@VampyrumFerox
@VampyrumFerox 2 года назад
Nice explanation, but next time could you drag that out into a 3 hour video? I get paid by the hour. Thanks.
@Singularitarian
@Singularitarian 2 года назад
What’s the reason for the language to have references at all? Why not just pointers? It doesn’t seem like references can do anything we couldn’t already do with pointers.
@AxeMask
@AxeMask 2 года назад
@@Singularitarian I'm relatively new to C++ and pointers / references so my answer could be wrong but I had the same question after watching the video initially. However, upon further thought, I don't think that references are used in the way that the video demonstrated. I think the main use case is to use a reference value as the formal parameter of a function so that when you're passing large values to a function, you aren't compromising performance by copying the entire value; hence the terms 'pass by value' vs. 'pass by reference'. That being said, I could also be completely wrong so if anyone sees this and can clarify for us, that would be greatly appreciated. Cheers!
@Odb718
@Odb718 2 года назад
@@Singularitarian I think sometimes you have to "decode" a variable and pointers may not have to go through that to work in an equation. It might make a cheap way to have a "global variable" by making a ref to it. It's probably a read only type situation. I'm not sure lol that's why I watched this video....
@anonym3852
@anonym3852 2 года назад
@@AxeMask Pointers are not in every programming language. Take PHP as an example, they only work with references. The key differences with an example: A pointer is a variable, that points to the address of another variable, but it CAN be changed, CAN be NULL AND you can dereference it, so you can access the memory itself or the address to it. A reference is a variable, that points to the address of another variable, but it CANT be changed and CANT be NULL. Lets say you have a function which always expect a User object. Than you dont want a pointer. A pointer could be NULL, so your function cant work and there will be errors if it is NULL. You could check before, if its not NULL, but this costs additional ressources. Also someone could change the value where the pointer is pointing too within their memory. This can be unexpected behavior. Better would be a reference in that case. You can be sure with references, that they have a valid value of the specific type (in this example a User object). Also for some styleguide if there is a &foo parameter in your function(if not const), you can assume it will probably get changed. Lets say you have an array with object. (Dont mind me if the syntax is not completly right, havent used C++ in a while, i try to make it at least somehow clear what i try to do and fk styleguides on yt) public function getTheHighestNumber(&numbers) { *highestNumber = numbers[0]; //Get first number of numbers array count = size(numbers); for(i = 1; i
@5r1zan
@5r1zan 7 лет назад
Liked the idea of split screen.... helps visualising the code.... awesome concept....
@umarajmal6216
@umarajmal6216 4 года назад
@Sara Kiba 😂😂
@terrymoist
@terrymoist 3 года назад
I can't understate how easy and simple you made this to understand, very epic.
@Timo-Epis
@Timo-Epis Год назад
These nerds try to act like they have an IQ of 300 by explaining things in a difficult way.
@carlpeterkirkebo2036
@carlpeterkirkebo2036 10 месяцев назад
Totally agree!
@blackblocky3866
@blackblocky3866 Год назад
Literally the best explanation of the pointers in all of coding history.
@dilute6980
@dilute6980 2 года назад
1 small thing you didnt mention is that pointers also have their own memory address. Just like any variable calling operator & on a pointer returns the address of the pointer, which is different to the value of the pointer, being a memory address that it is pointing to
@facts-nuk
@facts-nuk 3 года назад
It's been four year by now but still it is precious. This video make my day.
@chandrikasolankifashioncol1225
I read numbers of books but all confused. Well explained. Now it's clear. Thanks.
@ibrahimg.4469
@ibrahimg.4469 3 года назад
today good books = good tutorial video
@sammusaev5883
@sammusaev5883 3 года назад
@Greyson Francis whoa! go away
@HonsHon
@HonsHon 2 года назад
I read every book ever made but this video was better than all of them. Even Lord of the Rings
@moxieandreas9374
@moxieandreas9374 2 года назад
Just dont read books
@bestredditstories1158
@bestredditstories1158 2 года назад
I can't believe a seven-minute video summed up a concept that I did not understand for the longest time. Thank you so much for this.
@MoodyDood
@MoodyDood Год назад
I suffered with pointers and references for close to a year, thanks a ton!
@Gidid56
@Gidid56 2 года назад
The diagram gives the impression that ptr holds a meaningful value after int* ptr; It does not. It holds garbage. It does not get assigned any value. It will just contain whatever garbage is in memory the moment ptr gets created.. Also references are under the hood pointers that behave like value types. But they are not value types. Once the original value object they are referring to goes out of scope, the refernce now is dangling (invalid). You have to make sure, that your original value object outlives the lifetime of the reference.
@dawidp4227
@dawidp4227 2 года назад
I'm just nitpicking here, but it's impossible to have two ints on addresses 0xA and 0xB, because int is usually 4 bytes, so the integer on address 0xA actually lives on 0xB, 0xC and 0xD too. I know it doesn't make a lotta difference, but I think it's good to know
@rocket2739
@rocket2739 2 года назад
A could be 0x66294701 and B could be 0x55399572 In other words, A and B are names, and B != A + 1 That's why he used uppercases instead of writing 0x0000000a and 0x0000000b
@francoisloriot2674
@francoisloriot2674 4 месяца назад
it's also impossible to have 4 bits (single hex digit) memory address on any usable computer. So your knit picking missed the point that these just mean arbitrary addresses A and B.
@alcurb
@alcurb 6 лет назад
Great explanation. Simple and concise. I've been taking a Lynda course C++ Essential Training by Bill Weinman but he blows through the explanation leaving me in the dust. I could see the results of what was happening in his code example, but it lacked the graphical elements that would help me understand. You did that, and it is now clear. Thanks.
@Squash101
@Squash101 Месяц назад
Hands down the absolute best video on pointers I've even seen! I'm excited to watch your videos on LL and the rest of the different types of DS.
@Adam-gj3dn
@Adam-gj3dn 4 года назад
Definitely the best video on RU-vid explaining the difference between pointers and references. Also, thank you for not using all the programming jargon when explaining. Thank you!
@FirezFlightz
@FirezFlightz 4 года назад
I know this is 3 years later but, this is the best most understandable pointer video ive ever seen ! Thank you for making it!
@baronvonmike
@baronvonmike Год назад
Finally, someone just explains what an "alias" is.
@cauhxmilloy7670
@cauhxmilloy7670 2 года назад
Slight correction, pointers and references are really the same thing only differing slightly with syntax. You could liken a reference to a pointer that is never null and can only be set once (when declared). There are surely some syntax differences when working with pointers (no need to dereference, dot operator instead of arrow, etc), but they are really doing the same thing otherwise. You can verify by messing around with godbolt (looking at disassembly). Also note that you can do polymorphism with references. Thanks for the C++ content! The world needs more C++ enthusiasts! :)
@superpositif34
@superpositif34 2 года назад
Why *ptr has a good chance to be 0x0 without initialising it? In my opinion there is more chance *ptr is not 0x0 than 0x0.
@4AneR
@4AneR 4 года назад
I like the idea of thinking about a reference as an always dereferenced pointer with constant value
@Cagruntas
@Cagruntas 7 лет назад
Damn been looking for a good video on pointers for a while
@Cagruntas
@Cagruntas 7 лет назад
I found it
@arpeggio1231
@arpeggio1231 Год назад
bro so easy and simple explanation, I got a friend who has 35 years in programming and he didn't make it easy to understand. Thanks again brother
@Creuilcreuil
@Creuilcreuil 6 лет назад
basically a ref is an immutable pointer, i.e *int* * *const* ptr; which automatically deferenced by the compiler when used, then nulled
@ratgr
@ratgr 4 года назад
never nulled
@thulanitinashe6475
@thulanitinashe6475 4 года назад
can you explain more cause i am lost
@jaimealbertorocha5961
@jaimealbertorocha5961 4 года назад
Pointers have their own intrinsic address (memory address of the variable or object in question), while references do not. The intrinsic direction of the pointer is different from that of the variable or object it points to. Instead, the intrinsic direction of the reference is the same as the variable or object to which it was associated. The reference is simply an alias for the variable or object to which it is associated. As a complement, you can think of a reference as another name that is given to the variable or object to which said reference is associated. That is, the variable or object whose memory address is associated with the reference will no longer have a way of being called but 2. In other words, the variable or object that is assigned to the reference can be called with two different names, either with the name of the reference or with the name of the variable or object that is assigned to the reference.
@lachlanvanderdrift7013
@lachlanvanderdrift7013 2 года назад
bro, you made this so easy to understand. you're such a genius, I cant wait to come back to this channel for more things like this when I need it. keep it up
@jonathanp5195
@jonathanp5195 2 года назад
I'm amazed by how elegantly you explained this. Thank you for being such a great instructor!
@CarsonCameronClark
@CarsonCameronClark 4 года назад
Most flawless explination I've ever seen of any programming concept. Well done and thank you.
@FiicticioID
@FiicticioID Год назад
having c++ classes for 4 months, and i never had such a simple explanation between reference and pointers
@XxMonkeyACCxX
@XxMonkeyACCxX 2 года назад
i really appreciate writing the code while explaining the concept. I struggle understanding this concept with just drawings alone and then carrying it over to my projects. thank you
@rajcodes100
@rajcodes100 4 года назад
Great lecture but what I find a little tricky is that initially when we introduced the ref we used & ref = var , now if we want the pointer to point to var we write ptr = &var and if we want the pointer to point to ref which is var we write ptr = &ref .In a mathematical sense people can get confused here because initially & ref = var and (ptr = &var or ptr = &ref but &ref = var so in this sense it becomes like var = &var).
@nikolayrangelov1081
@nikolayrangelov1081 4 года назад
Hello, very good explanation! Can you cover in your next videos more advanced topics such as *&, **&. I know it is a combination of pointers and references, but extra explanation and exercises always help! Thank you!
@nicholashendrata
@nicholashendrata 4 года назад
THIS IS THE BEST VIDEO I'VE EVER SEEN FOR EXPLAINING POINTERS AND REFERENCES I CAN'T THANK YOU ENOUGH.
@sd9302
@sd9302 Год назад
Wow! Can't express my gratitude in words! Thanks sir
@weiqianzhang981
@weiqianzhang981 Год назад
by far the clearest video I've found.
@taki-eddinechih5197
@taki-eddinechih5197 6 месяцев назад
the best explanation I've ever seen about pointers
@sarumironfort
@sarumironfort 2 года назад
The ptr has a location and address as well. You should point out that, and that by default the address to the vars would be sequential with offset of the previous ones size. Also as ptr points to zero it would *ptr actually show the value of whatever is at zero location. If these are statically defined then yes it would be preinit to zero but if it was on the stack it might not be zero.
@hiTocopter
@hiTocopter 2 года назад
I commend people who want to learn this, because they're the ones who create managed languages which does all (or most) of this for us in the background.
@punchline1729
@punchline1729 Год назад
His Tutorials are fantastic. I don't know why he didn't continue uploading tutorials
@KaustavMajumder
@KaustavMajumder 6 месяцев назад
7:21 - The main essence of the video. However, I would recommend everyone to watch the entire video from start till end without skipping.
@AhmedKhan-yw3wx
@AhmedKhan-yw3wx 4 месяца назад
And here I was thinking pointers would be hard to tackle, thank you so much for such an easy explanation .
@enigma2886
@enigma2886 7 лет назад
You are a life saviour ....man thank you so much....thank you so so so much !!!!!
@sebastienboutin8588
@sebastienboutin8588 3 года назад
Hey nice video. It could have been nice to explore in more detail the difference using references vs pointers as arguments with functions, inside classes, with more complex objects, etc... But thanks for the video anyway!
@BernhardWeber-l5b
@BernhardWeber-l5b 2 года назад
This is the most excellent explanation video one can imagine
@lilyscarlet2584
@lilyscarlet2584 3 года назад
a reference is a pointer with more strict rules. it holds the address of other things in memory but it cannot be retargeted and must be initialized when created. this means you have less control but is safer since you cant accidentally point to bad memory locations. i usually use c so i am used to pointers but its just an option in c++
@stevephillips2819
@stevephillips2819 2 года назад
Not strictly true, you *can* accidentally bind your reference to a bad address by dereferencing an invalid pointer. It rarely happens, but does happen in practice with careless memory management and various mishmashes of semantics. I made a little test with g++ and this doesn't segfault till we try to read the reference which is effectively null: int* test_ptr = nullptr; int& test_ref = *test_ptr; printf("bound a nil reference "); printf("value of testref: %i ", test_ref); // segfault another way references are odd is that they apply value semantics to your pointer - so for example test_ref = some_other_variable; is assigning the variable that test_ref actually points to with the value of some_other_variable - and not making test_ref a reference to some_other_variable.and also C++ has operator overloading so if you have a class with an overloaded operator= then c++ will actually invoke that on your second usage of the equals operator with your reference variable. I actually prefer the explicitness pointers give nowadays because it hides less of whats actually happening.
@lilyscarlet2584
@lilyscarlet2584 2 года назад
@@stevephillips2819 yeah i just meant as its intended use
@nasser3780
@nasser3780 2 года назад
you can not declare a reference without assignment, so it has to be assigned during the declaration not like a pointer which can be declared as an empty pointer then point to specific variable/object, point can be casting to a different data type but reference is fixed for that data type only, so a reference can be seen as an alias to the variable.
@iyobosajefferson6457
@iyobosajefferson6457 Год назад
Love how this was concise and diagrammatically explained.
@Sub-zero1123
@Sub-zero1123 3 года назад
The best video that explains pointers. Thank you
@PaulProgramming
@PaulProgramming 3 года назад
Happy to help!
@Florakinz
@Florakinz 5 лет назад
Best video on the basics of pointers and reference. Period. :)
@o2dyt
@o2dyt 6 лет назад
My GF has a test tomorrow about this. You just helped me make it clearer for her. Thanks!
@iVuDang
@iVuDang Год назад
love the visualization, conciseness, and easy to follow style of this video , thank you
@gregholland11
@gregholland11 2 года назад
This was helpful. Always wondered what the difference was but never cared enough to Google it.
@qemmm11
@qemmm11 9 месяцев назад
Suddenly! I feel that the pointer arithmetic is so easy😮 Thanks❤
@robinlee-delisle8591
@robinlee-delisle8591 6 лет назад
Perfect explanation and the visualisation used really aided in my learning!
@Tignite91
@Tignite91 6 лет назад
Why don't you initialize your int* ptr to 0 or nullptr instead of leaving it to maybe beeing null? Especially when teaching you should consider not leaving variables unitialized because you can easily overlook such a problem in larger projects..
@jasonjypark
@jasonjypark 5 лет назад
Your explanation was better than my professor's!
@tanmoydutta5846
@tanmoydutta5846 2 года назад
And that's why, pointers pose a security threat, whereas references don't.......
@jjoeygold
@jjoeygold 2 года назад
Integer pointers take two or more memory location however have the memory locations 0xA and 0xB one byte appart. memory size of the pointer is hardware specific and compiler specific and the memory locations should be 0xA and at minimum 0xC (2 bytes) or some 32bit compilers have integer sizes 4 bytes ie 0xA and then 0xE
@vasiliynkudryavtsev
@vasiliynkudryavtsev 2 года назад
Yep, I also spotted this anomaly. Unless his machine has int8_t as int or Harvard architecture.
@rpersen
@rpersen 2 года назад
Great explanation. Remember I struggled with this 20 years ago. Subbed.
@dastin7276
@dastin7276 3 месяца назад
Excellent video. Excellent teacher. Thank You.
@auntikjeb6600
@auntikjeb6600 Год назад
You explained it so well i tried to understand the difference the whole day. Thank you🎉
@anastasijad4830
@anastasijad4830 2 года назад
beautifully explained.. i got goosebumps when i finally figured it out
@decky1990
@decky1990 2 года назад
After 12 years I think I finally get it. It’s like INDIRECT() in excel
@leam1978
@leam1978 2 года назад
before i switched my career to art, i was always confused about this. thanks for the explanation; might come in handy some day.
@xYuki91x
@xYuki91x 4 года назад
You explained it waaaay better than my professor. I finally understood it thanks to your video!
@hishamakmal2149
@hishamakmal2149 2 года назад
This is by far the best explanation on this topic. Thanks a million Paul!
@sher.5027
@sher.5027 3 года назад
Thankyou. it was a great explanation compared to other youtube videos. Thanks again.
@maxim25o2
@maxim25o2 3 года назад
You forget to mention that pointer have also his own address. By reference when you create name for variable, compiler is assigning address in memory, but for reference, name don't have address, is empty, then You can assign another name of variable just copying in that place address. it means that You have 2 names with this same address in memory. Where pointer is desighn to hold in memory address from another value. And have his own address. That's why You can point to pointer,and make pointer pointing to pointer which is pointing to another pointer.
@MukeshKumar-oc8or
@MukeshKumar-oc8or Год назад
Thank you for this tutorial! It was clear, concise, and easy to follow.
@TheRojo387
@TheRojo387 2 года назад
This is why actually playing games, scenarios, puzzles, or other simulations runs on references, while actually designing them uses pointers.
@mykalesalad
@mykalesalad Год назад
Definitely less confusing now, thank you for the thorough explanation.
@kjafhjfajshf
@kjafhjfajshf 2 года назад
Жаль что в универе эту тему не объясняли так доходчиво. Спасибо!
@jessiada
@jessiada 3 года назад
I finally understand what they are now thanks to you, but I'm still clueless as to why on earth either of these would ever be necessary.
@davidlp3019
@davidlp3019 3 года назад
it makes c++ highly efficient. If you call by value, basically the computer needs to look for the value in memory then access that memory then do something with it. But if you give it a pointer it misses the need to look for the memory.
@fionaho4598
@fionaho4598 2 года назад
i appreciate your explanation, way better than my university professor!
@lmthelex
@lmthelex Год назад
te amo loco, viva el conocimiento libre y a disposicion de todxs!!!!
@osamaato921
@osamaato921 3 месяца назад
it was a hell question in my mind after you answered it thank you
@rustyspottedcat8885
@rustyspottedcat8885 Год назад
ref -> static mem.alloc (stack) vs ptr -> dynamic mem alloc (heap) && ref = substitute name (label) for address && ptr = variable holding address
@Maxpain666777
@Maxpain666777 4 года назад
Absolutely amazing on the splitscreen teaching. Thank you so much.
@anmol2757
@anmol2757 3 года назад
Man that's the best explanation I found online. Thanks a ton bro and kudos to your effort . All my doubts were cleared
@ethannnnnnn
@ethannnnnnn 6 лет назад
Honestly the best explanation of pointers I have ever seen. The diagram helped an unbelievable amount. I can't thank you enough.
@corypheus1316
@corypheus1316 2 месяца назад
bro , how simple is that Subject actually. Subscribed und liked. Thank u so much
@OpheliaSHolmes
@OpheliaSHolmes 3 года назад
I enjoy the way you explained pointers, the chart helped a lot. Thanks!
@marziantulabot5512
@marziantulabot5512 4 года назад
In the last part about the reference. Does this mean that when we change the value of var, the value of ref also changes because it is pointing to the same address?
@CasualWatcher279
@CasualWatcher279 3 года назад
This video was better than my £9500 University lecturer.
@yannmasoch
@yannmasoch 6 лет назад
Pointers and references in C++ are not easy to figure out, and your explanation makes things easier! Thanks :)
@ImmortalBeast-iz5zl
@ImmortalBeast-iz5zl Месяц назад
Thank you so much. Very well explained.
@HelicopterRidesForCommunists
@HelicopterRidesForCommunists 2 года назад
Visuals helped tremendously. Thank you!
@TheCasanovaPugilist147
@TheCasanovaPugilist147 3 года назад
Quick question, I created variable int i = 3. Then I created int *p =&i . I printed the following and got the outputs p=0xfdc4, *p = 3, and &p=0xfdb8. I checked &i which equals 0xfdc4 which is what p equals since it is pointing to it. So &p is the memory address of the p pointer variable itself like how 0xfdc4 is the memory address of the i variable? To put it visually like in the video, the box of my p pointer variable would have 0xfdc4 inside the box and outside|underneath the box would be 0xfdb8 correct?
@hil449
@hil449 2 года назад
Exactly
@thomassieber6585
@thomassieber6585 Год назад
A pointer is an address in memory and stores at that address the address of an variable. A reference is just an address to the variable.
@reinaldoyang2546
@reinaldoyang2546 Год назад
Very good explanation! easy to understand
@abarna812
@abarna812 3 года назад
Best video for pointers basic
@muallaozdemir1012
@muallaozdemir1012 2 года назад
I loved how you explained this, so easy and clear. Thank you.
@jenweatherwax7113
@jenweatherwax7113 4 года назад
This visual approach helped me a lot!!!
@shukurullomeliboyev2004
@shukurullomeliboyev2004 11 месяцев назад
OMG, how easy to understand. thank you
@atabac
@atabac 2 года назад
Pointer variable and reference variable in c++ both stores address of the allocated data in memory. In other words, they both points or reference to a data. They only differ in usage. Reference variables are immutable, you cannot point it to another block of data in memory once assigned. When you try to access the value of a reference variable it implicitly dereferences to the value it is pointing to. Thats why they are called 'alias'. On the other hand, pointers can point to different allocations in memory even if you already assigned it. Also pointers can be null at the moment if the data you intend to point is allocated in the future. Also you need to explicitly dereference a pointer to access the value.
@PunmasterSTP
@PunmasterSTP 2 года назад
This was incredibly useful. Thank you for sharing!
@blackcoffeedevelopment3522
@blackcoffeedevelopment3522 Год назад
short, simple, and helpful. Thanks!
@vincentlee8896
@vincentlee8896 2 года назад
you're a great teacher
@Kenforbes3
@Kenforbes3 4 года назад
Excellent explanation of the difference between a pointer and a reference.
@Decco6306
@Decco6306 3 года назад
im just now linking assembly language Ive been learning for the z80 for my calculator, and this connects so many connections that i haven't made. I totally get why pointers do what they do why and why they are usefull when writing to the address of an address port you are basically dereferencing a pointer just like in C. Crazy.
@tibyansuliman8657
@tibyansuliman8657 4 года назад
Paul your videos saves me every time 😭❤️ thanks a lot ❤️❤️❤️❤️❤️❤️
@shivrajbhatti1074
@shivrajbhatti1074 5 лет назад
an example of the difference in functionality at the end would make this 💯🌊
@timschulz9563
@timschulz9563 2 года назад
So references are sort of like hard links (different name, same inode -> different name, same part of memory) and pointers are soft links (different name, different place in memory that contains the information on how to get to the data).
Далее
What Are Pointers? (C++)
41:55
Просмотров 561 тыс.
Simple Flower Syrup @SpicyMoustache
00:32
Просмотров 2,7 млн
what even is a "reference"?
5:44
Просмотров 128 тыс.
WHY did this C++ code FAIL?
38:10
Просмотров 251 тыс.
Pointers and dynamic memory - stack vs heap
17:26
Просмотров 1,4 млн
References in C++ Explained
15:03
Просмотров 99 тыс.
C++ Pointers - Finally Understand Pointers
15:56
Просмотров 211 тыс.
Pointers and Dynamic Memory in C++ (Memory Management)
13:54
Master Pointers in C:  10X Your C Coding!
14:12
Просмотров 300 тыс.
Comparing C to machine language
10:02
Просмотров 5 млн