Coding 101 63 (Transcript)
Net casts you love from people you trust, this is Twit! Bandwidth for Coding 101 is provided by Cachefly at cachefly.com
Father Robert Ballecer: This episode of Coding 101 is brought to you by Lynda.com, the online learning platform with over 3000 on demand video courses to help you strengthen your business, technology and creative skills. For a free 10 day trial visit Lynda.com/c101. That’s Lynda.com/c101.
Today on Coding 101 we’re continuing our C module and we’re wading into pointers. Hello and welcome to Coding 101. It’s the Twit show where we let you into the wonderful world of the code monkey and the code warrior. I’m father Robert Ballecer the digital Jesuit and I’m joined by my super special guest co-host/code warrior…we’ve really got to work on that title – Mr. Lou Maresca. Lou, welcome back to Coding 101.
Lou Maresca: Thanks for having me again. I’m excited.
Fr. Robert: Now of course we are pre-recording this show because I’m at NAB right now and we don’t usually say we’re pre-recording but I’m going to do it now because I want to be honest with the audience. We were supposed to do this a couple hours earlier but you had an interesting afternoon…stuck on a freeway somewhere?
Lou: Car trouble yes. I was changing a tire during rush hour. It was fun.
Fr. Robert: I hear this is what happens when you drive back from Microsoft, you just you know – lose a tire.
Lou: You get a flat tire.
Fr. Robert: Actually the story that I want to talk a little bit about does concern Microsoft because I was in a forum the other night and people were talking about how the rise of containerize services is changing the way that people program. I didn’t think about this but this is absolutely true. When we used to think about programming teams you would typically build up some sort of application suite, a development suite that you could hang things off of but we’ve gotten a lot of announcements from Microsoft this last week about their Nano server. It’s going to come in server 2016 and the idea is they’re breaking it down into just the bare bones and then you hang off micro services on it and it is called Nano Server. So that you can containerize and then just spin up the instances as you need them. What does that do to the programmer because you can’t think the same way right?
Lou: If you think about it, it’s basically taking virtualization to the next level because when you’re building an application you basically are building it in what’s like a sandbox and it’s allowing you to then virtualize it and have multiple different sandboxes on the same server or same machine. So when you’re actually building your application you might actually be running right next to the same instance of that application on the same machine and so you kind of have to think about – you have to be more careful with what you’re doing and how much resources you’re taking and if you’re taking too much CPU or memory and that kind of thing. So it changes kind of the way the programmer has to think when they’re building their application.
Fr. Robert: Right, if you look at the announcement that Microsoft made about this Nano Server it is going to be 1/20th – 1/20th the size of the Windows server core. It is going to only have things like hyper v, clustering, networking, storage, dot net, core, clr and no g y. So they really have stripped this thing down which historically is something that Microsoft has avoided doing. They’ve done it for Windows XP embedded, they’ve done it for a couple of dot net projects but they don’t like letting people have just the core components. That’s not been a core philosophy for Microsoft so of course that’s changed. As you said now that the shift has been to containerization where you can have a lot of instances of the same services to handle the load rather than 1 really big powerful framework. I guess like for example I can’t be always calling out for resources. How do I do that?
Lou: If you think about it Microsoft Windows has had the capability for you to just do gooey for a while – or no gooey for a while so you could do just a command prompt but like you said it has all these other things already installed on it. There’s lots of different packages and these things are still there when you have just the command prompt version of Windows. But like you said now they’re breaking it down to kind of almost like a Unix style where it is containerized and now when you’re talking about resources; when you boot this thing up it takes very little resources, almost no CPU and then you have the chance to build an application whether it be a service or just a standalone application that allows you to utilize almost 100% of the resources because now you’re breaking it up into these little containers that can use portions of the resources of that machine. Now day servers have hundreds of gigabytes of memory in them and they don’t necessarily always use that amount of memory all the time. But with containers you have the ability to break it up and use that memory 100% of the time.
Fr. Robert: Right. Actually we’ve got JJ to the 484 in the chat room who wants to have a conversation on Open Source Windows which you know the interesting thing is I don’t think that’s nearly as important anymore because I think even Microsoft has recognized that you can build applications, you can build these containers and you don’t really have to care about what platform it is running on. It will run on any hardware, it will run on any software, it will do its own thing. In fact if you look at the move that Microsoft made with dot net to contribute a large part of dot net to the Open Source foundation and also to create a free version of Windows 10 – a stripped down version of Windows 10 that will run on the Internet of Things it’s kind of like going Open Source without really going Open Source.
Lou: Yes, if you want to be a tinkerer and you want to play with the kernel and you want to change, you want to add services and change the gooey… a lot of people wish they could customize the start menu. There are companies out there that do it but they do operating system hooks to do it. They want to make it easier and I guess it makes sense that you’d want to Open Source but Windows is an eco-system kind of like iOS and it is making people feel – it is a little bit more comfortable because Microsoft controls that eco-system in a way that controls security and they’re opening the door to a lot more things like these Nano compartment containerized things with Windows Server. So they are making it easier for people to do things and they’re making it easier for people to virtualize. They’re making it easier for you to build a service so I think it’s getting closer but I’m not sure if it’ll ever be Open Source.
Fr. Robert: Right. Lou I could talk about this forever, in fact we did have conversation about this on This Week in Enterprise last week but I want to save us as much time in the show as possible for the rest of the C mini module because you are going to be getting us into pointers and I think people need as much time as they can get. But before we move on let’s go ahead and thank the sponsor for this episode of Coding 101 and it’s got to be Lynda. Now when you think of Lynda you should be thinking of a repository of knowledge on the internet. It’s not just programming skill, it’s not just computer skill. Lynda is the place to go if you need to increase your job skills training, if you want to learn Excel, if you want to learn hobby arts like photography and videography. It’s the place to go if you want to learn how to fly a quadcopter. Lynda.com really is a place to go to find out information about anything you want to find out about and it’s such high production value that it just helps you learn. You don’t spend a lot of time thinking about how you would do the lesson, you just get the information that you need. Now Lynda.com is for problem solvers, it’s for the curious, for people who want to make things happen. Maybe you do want to learn that new programming language, maybe you want to develop an app, maybe you want to sharpen those photography skills or maybe you want to redesign your website. Lynda.com has everything you need to feed your curious mind. Some of the courses that I would recommend are Up and Running with Mathematica 10, programming the Internet of Things with Android and the Foundations of Programming Code Efficiency. They also have an amazing series called Code Clinic. It’s a 6 course series where Lynda.com experts look at common code challenges and offer their solutions using C++, C Sharp, Java, PHP, Python and Ruby. Now I’ve been using Lynda.com for reference whenever we do Coding 101 modules and also here in the brick house we use Lynda because we switched from Final Cut on the Mac to Adobe Premier Pro on the PC and sometimes our editors just need to get that little clue for what tool transfers over in what way. With Lynda.com’s transcripts it means that you don’t have to sit through entire lessons, you can search for your question and find the exact part of the video that deals with that solution. You can watch and learn from top experts who are passionate about teaching, you can stream thousands of video courses on demand and you can learn on your own schedule. That’s important. Learning at your own pace allows you to watch these courses from start to finish when you have time, when you can consume them and that just means the information will stick. Again you can browse those course transcripts, you can take notes as you go and refer to them later, you can download tutorials and watch them on the go including access on your iOS and Android devices. You can create and save playlists of courses that you want to watch to customize your learning path or share with friends, colleagues and team members. And guess what? Your Linda.com membership gives you unlimited access to training on hundreds of topics, all for 1 flat rate. Whether you’re looking to become an expert, you’re passionate about a hobby or you just want to learn something new I want you to visit Lynda.com/c101 and sign up for a free 10 day trial. That’s right, free 10 day trial, so you’re out of excuses. This is how you need to learn and it’s how you need to learn now. That’s Lynda.com/c101 and we thank Lynda for their support of Coding 101.
Alright Lou, let’s get to it. When we last left our intrepid explorers they were just diving into C and now you’ve got a little something for us. Where do we go?
Lou: A little something. So I think the first thing I want to do is I want… somebody asked in the Google Plus the other day; can we use Visual Studio to program in C? I wanted to show really fast just how to get Visual Studio to work with C. So you have just the Windows desktop version on Visual Studio express. I have the ultimate edition but it doesn’t matter, it’s going to work the same exact way. All you have to do is create a new project and in there you’re going to choose visual C++. It’s a little confusing but that’s what the C compilers kind of coded or blanketed under and then you can just put whatever name you want here. So name, and then I’m going to just hit ok and watch what happens. We get this window that’s going to pop up and say let’s create a little application using a wizard. So I’m going to go through the wizard and all I’m going to do is click empty project, console application, empty project, uncheck that box and then hit finish. That’s all I’m going to do. Now I’m going to get what you’ll see over here – my little solution explorer once that gets created – hopefully gets created. There we go. Then what we’re going to do then is we’re going to add a source file to it and the source file that I’m going to add to it is I’m going to go to add new item and I’m again going to click on C++ file but instead of choosing that I’m just going to call it console .c and I’m going to hit add. Now what you’ll see is now I have a console application that I can run, that I can actually start coding in C code. It’s no problem once I compile this I can…
Fr. Robert: And there, that’s what we’re used to. That’s what we saw last time.
Lou: Right. So it’s exactly the same and it’s just as easy as that. This is the application we showed last week. We talked about this where we’re including the library and it lets me to standard io and then I have a little tiny function at the top here that lets me click enter when I want to enter and move on. But what we wanted to go into today is talk a little bit about kind of the under workings. What’s the advantage of using C? Why are we using C? I guess we talked about last week... if you remember we talked about that the C is really close to the metal right, it allows you to compile and code in a way where you feel really close to the metal, really close to the memory and really close to the machine. So I think that’s really the key to C and so the first thing I like to show is a couple things. 1 is the size of method there, a function that you have in C which what that does is allows you to show exactly the size of a variable that you have in your application. Like for instance how much memory it is taking up. We like to call memory as a currency for your application and back in the C days when people used to code a long time ago in C it used to be that they didn’t have much memory and they needed to be very specific on how much memory they used. So if you see here I have a quick really simple application that shows me creating a variable that’s an integer and we talked about that last week. There are different types of variables and in this case I’m choosing an integer and I’m setting a value to it. So I’m going to initialize it – they call it initialization. I could have done this on 1 line too but I wanted to be very explicit here so everyone can understand what I’m doing. Then I did the print statements like I did before but the difference is that we saw the first line where I’m using just a print statement and I’m passing the variable and saying hey this is what the value of it is. But then the second line I have another print statement that I’m using the size of and what this is going to do is if we run this it will actually show us the memory size of the variable. This is a lot different than – so you notice it has 4 bytes – this is a lot different than if you use a high level language like Python and C Sharp because you don’t necessarily know exactly how much memory you’re utilizing when you’re creating things. They try to help you and say if you do an integer in C Sharp it’s most definitely going to be this many bytes but again then you have the overhead of the CLR which is the run time and everything else. But when you’re doing C you know for a fact that my integer value is always going to be 4 bytes and no matter how many integers I have it’ll be 4 times that many integer points.
Fr. Robert: There are going to be people who are looking at this and they’re going to say wait a minute; why do I care? My computers got so much memory but you have to remember that one of the things that C is still used for today is a lot of embedded programming. If you are using any Arduino based machines, if you’re using a mega based chip set you’re probably going to be programming in C for just this reason because that you go to the higher level languages you’ve got so many layers of abstraction that you don’t know exactly where your memory is going. With C you always know exactly how much memory every variable type is going to use, you know how much memory every method is going to use and therefore you can predict how the limited resources of your embedded devices are actually used.
Lou: Exactly right. That’s so important because people don’t really think about it today because you have these massive desktops, laptops, even your cell phone can have 4 gigs or 8 gigs of RAM sometimes so it’s like why do I really care about memory. But like you said when you have these little type of interknitted thing devices you have to be very specific. Some of them only have – like the Raspberry Pie, some only have a small memory so you can load an application to it maybe 12 kilobytes, 24 kilobytes and you have to be very specific about how much memory you’re using so that’s why C is a really good language for it.
Fr. Robert: Alright so we’ve got that down that the primary advantage of C is that it is incredibly predictable on how much memory it is going to use which makes it a unique language among some of the higher abstraction languages that we may use today including things like C Sharp or Visual Basic.
Lou: Exactly. So one of the cool little syntax tricks that I like to do too is you have this value and we know that it’s a type – a number, an integer and we know what the size of it is but maybe we want to know where it is at. So like what we were talking about how the computer has memory and the memory has locations and those locations are represented by numbers and sometimes you want to know where that location is on the machine. So like for instance when this application spins up it gets loaded into a specific portion of my memory on my PC and then when I load up other things on that program it also loads them in that portion of the memory. So like for instance if I wanted to know what the memory address of this value is I use this cool syntax here called a reference operator. Basically all it is doing is saying go and get me the location in memory of that value. So if I run this all you’re going to see is this fancy number here but basically all it is saying is that’s the memory location of that variable. So again it is kind of cool because now you’re getting to the under pinning of what your operating system is doing when you’re creating variables, when you’re actually programming.
Fr. Robert: Right and this is in keeping with that theme of getting really close to the memory. You don’t see this if you’re programming in any other language because you only know it is the variable. This is the variable and that’s where I’m storing that value. But in reality that variable needs to actually exist in some physical piece of memory and that piece of physical memory has to have an address because when I go to the hardware I don’t say give me the variable called A, I say give me the variable, give me the data that starts at address this this and this and goes on for 4 bytes.
Lou: Right. We’ll get into it a little bit with something called pointer where it’s basically a memory location but one of the things in modern languages of today like C Sharp is you can – when you pass variables around in your application it can be done by what they call reference meaning you’re passing the same copy of that variable all around and when you’re changing it like say in a method or function it’s changing that original copy, that original location. But in C when you pass a value around if you don’t use a special construct called a pointer or a memory location you’re actually copying the data around so if I were to create a function that were to actually pass that as that value somewhere. Let’s say I created a function called show me and I passed it the value here and I did something with it here then what I could do is when I passed the value in here and called show me, it would actually pass a copy of it and not actually the original value. So if I were to inside here set the value to something else, when it come back out it would be the original value because it was not actually changing anything.
Fr. Robert: Right.
Lou: So that’s actually the key here. With some of the modern languages today it allows you to pass by reference much easier but that’s where we get to the concept of what we call pointer. So what a pointer is, is it’s basically just a variable where you can store or hold a memory address and reason why you want to do it again is just like I said. Sometimes you want to be able to pass around not just the value but where the value is stored. So this way you have a better understanding, you actually have the ability to change the original value. So you’re not actually changing a copy of it. Again that’s all around size of your program. You want to be very close to the metal and you don’t want to be making copies of stuff and doubling up how much memory you’re using. The way you actually create a pointer is you use what they call a D referencing operator. It’s just a fancy way of saying if I wanted to create a pointer here called value 2 that’s all I have to do. What I could do is actually store the value of – so I give the memory location to my original value and that’s I’m actually storing the memory location now in my pointer. I can start using this and passing it around just as if I was passing around a variable.
Fr. Robert: Ok now let’s back off just a bit because this is typically where people who are brand new to programming – the first time they hear about pointers they’re going to go wait a minute, hold on Lou! Why wouldn’t I just use the variable name? I don’t understand why are you trying to make me do this additional step of trying to figure out where the memory actually starts and what its address is? What would be the simplest way you can tell them why and when you need to use a pointer versus just the variable name?
Lou: I think the simplest way is that if you’re just doing a simple application like this and it’s just a couple lines it doesn’t make sense to use a pointer but there are some instances. For instance if you’re going to be using an array or building an array… we talked about an array before. It’s just a table of things that are the same type. So like a whole bunch of numbers in a table and I can store those in a big table but what I can do for pointers is I can actually grab a location in that array right away by just using its memory location. Another way like I said before if you wanted to build a function in this application and you wanted to pass it a variable but you didn’t want to actually copy the variable to that function, you wanted to pass your original one that’s in your app, you wanted to pass the instance of it around you could use the pointer and that allows you to reference the original value. So it’s really dependent on your application but in simple apps you’re not really going to do it but more complex – having functions and stuff, as you start to build bigger applications you’re going to start using pointers for sure.
Fr. Robert: Right. That’s actually a really good explanation. As you start just use variable names but as you get more advanced and as you start going between methods and functions, pointers are going to become important.
Lou: Exactly right. So I wanted to really fast show you an example of what an array looks like so we can kind of show you an example. So we did an array before – I think it was just a very simple one but I wanted to show you an example of what that looks like. So this is an array of just numbers, integers and basically that’s how I’m initializing it. There are multiple ways to initialize it. You can initialize it by doing it this way, you can initialize it by putting that I’m going to have 5 values and then I can loop through this array, I can use loops and do that way or I can actually initialize just 1 index of that to some value. So there are lots of different ways to initialize but this is basically the easiest way of doing it – to just do that 1 line like I was showing you. An array will hold a bunch of different types. You can do an integer, you can do a character array meaning I can hold… A character array in C code is kind of like a string like we’ve done in other coding. So this will hold the word code in it. So there’s lots of different ways to initial arrays. Arrays are very useful because it allows you to store a whole bunch of data and be able to loop through it and array through it and all that stuff.
Fr. Robert: Lou I’m going to pull you back for just a bit because 1 of the things we like about being on the Twit TV network is we can get immediate feedback from our audience and we’ve got a question from Web Zero 4A – a very simple question and I think you know often we forget that this is actually a question and that is; what does it mean if your memory has an address of 144614641? How does that become something that stores a value? How is memory laid out?
Lou: Memory is laid out in a software system by what they call a stack and a heap and your application gets a specific amount of stack memory when you boot it up the first time so it gets very complex but it’s all dependent on different operating systems, the fitness of your operating system but you get a certain amount of memory and that memory has a beginning location and an ending location. That stack is kind of right in front of you at the forefront, kind of what they call your RAM I guess you could say and also there’s what they call a heap which is more like if you’re using C++. A heap stays around for much longer. So like if for instance if I were to create a class and an object I’d put something on the heap and it will store it on a block of memory called a heap and that will stay around a long time for like the life time of that object. But the stack allows me to kind of just put things on the stack and as I use them I pop them off the top and then they just disappear over time because they’re just values. So that’s kind of how your memory is structured. Obviously it’s more complicated than that but again your application gives a beginning address and an ending address and then as you put stuff in it your memory gets kind of reorganized and organized in the operating system.
Fr. Robert: Right exactly. Alright so we’re in arrays now and you’re explaining to us how arrays are formed and exactly what the structure is. What’s the next step?
Lou: So I think the next step is I wanted to give a really quick example here of how you could use pointers and then we’ll go back to how we can use pointers with arrays. It’ll make a bit more sense after we’re done with this. So let me show you an example of that a pointer is. We have this original example of us using a value and then setting the value but then I declared another value here called value 2 and I made it a pointer. What I’m going to show you here is the original line was printing out the value and then I was printing out the size and then I was printing out the actual memory location. But then I wanted to do something different down here. I wanted to set, to grab the memory location using that reference character there and I wanted to put it inside the pointer. So basically I’m saying that the value of this guy is now… the memory location of this original value is now put inside my pointer. Now what I’m going to do is I’m going to print it out but what you’ll notice is when I don’t use the actual little dereferencer here you actually print out the memory location of it, not actually the value. But if I use the dereferencer what you’ll see is when I print this out…so the first line is the value and the second line is the size, the third line I used that and percent so it was basically the referencer and then the third line is me just using the value, the pointer and you notice now I’ve got the variable – again the memory location. But then the final line is I’m using the pointer base variable and it’s basically printing me out the actual value again. So the key here is basically considering that value or that pointer to be the value. That’s kind of a cool way of showing that you can use a memory location and you can use the actual value or you can actually dereference it using a pointer. That makes it a little easier to understand from that point.
Fr. Robert: So this is giving us the value, this is giving us the address where it is actually located and it’s giving us the size of the location. Nice.
Lou: Right. Now I think the last thing we want to do is kind of give an example of how we can use arrays to… because arrays are different than pointers but they are very close to, they’re not the same thing but they have a ton in common. They’re very common. For instance an array sets aside a continuous span of memory for 1 specific data type but an element in the array can actually be just a small offset. So like for instance if I’m at memory location 1 and I put an integer in that array then I can say that the offset of that value is actually 1 plus 4 bytes because I’m basically moving over 4 bytes to get that value. I’ll show you an example of what that means so this way it’s a little easier to understand. For instance in this example…I’m going to get rid of this loop so it’ll be a little easier. I have a character array of 4 characters and what I’m going to do here is I’m going to show you that what the address of that 1st, just the array itself and what you’ll see here is the address of this guy… whoops, I’ve got to initialize thing first. Sorry about that.
Fr. Robert: It doesn’t know what that is.
Lou: There you go. That’s what happens when you compile and you don’t…or when you break the code and you don’t compile. Ok there we go. So what I’m going to show you is that the first element of this array has… the 0 element of this array because arrays start at 0, they don’t start at 1. The key here is if I were to increment that memory location, say I want this second 1, what we’ll see is it’ll actually go up in 4 bytes. So let’s print out 2 versions of this.
Fr. Robert: Yes give me the first 1. So people can actually see that no really an integer is 4 bytes.
Lou: That’s right. Oops, it would help if I did that. It’s not compiling. There we go. What we’re seeing is that I’m actually moving up 1 element in the array and it’s giving me the address of that next element in the array. So you see it’s actually 1 byte different because this is not an integer array that’s normally 4 bytes different. This is a character array. 1 character is 1 byte divided by themselves so basically I moved up to the second instance of that to the second element and now I moved up 1 byte. So if I were to add a third one or a fourth one what it would do is just move up 1 memory location by 1 byte. That kind of shows you how…
Fr. Robert: Lou just for giggles go ahead and change the array to an array of integers.
Lou: Sure, there we go. We’ll do 5 and then change this really fast.
Fr. Robert: Or just comment it out.
Fr. Robert: Even better.
Lou: There we go and then we’ll do 2 of these. We’ll do this and then this and then we’ll show that guy. So what we can see here is the first one is a character array where we go up 1 byte as we go up each element in the array and then the second one is an integer. As you can see there is a memory location and then it goes up 4 bytes.
Fr. Robert: This is memory usage in real time. This is exactly what’s happening inside the machine. When you declare that array it’s going to take all the contiguous memory and you have a starting address of the array and you have an ending address of the array and every element will increment depending on how much space each of those elements will take.
Lou: That’s right. So again you’re kind of close to the metal here and you’re starting to understand using variables and just how much space they’re taking up in your application and then where they’re located in your physical memory. That’s actually a huge step into understanding how computers work if you think about it. Once you start to understand that and then doing embedded programming you’ll really start to understand why you need to pay attention to that type of stuff.
Fr. Robert: Lou there is something else here. Arrays are great I know, I actually spend a lot of my time working with arrays because I do a lot of analysis of data. However when we’re dealing with arrays we’re dealing with an array of similar elements. You’ve got an array of characters, you’ve got an array of integers, and you can have an array of doubles, whatever it’s going to be. There is another data type that actually can combine dispirit datas and that’s called a struct.
Lou: That’s right. A struct is a collection of variables that are kind of blanketed under a single name. For instance if I wanted to create – we talked about this before in some of the other programming languages where you can have structs that are… you bring things together and you basically characterize them. I’ll show you an example really fast of what that looks like if you show my screen again. I’m going to actually create a struct called person and I’m going to put it on… I’ll show you on the screen here. What this person has is several attributes that describe it. So in this case I have my first name, my middle name, my last name or the student’s last name, their height, their hair color and this allows me again like you said to collect a bunch of things and collect them under 1 single name for better handling. In this case it’s just a collection of properties or attributes in this case. There are lots of ways to declare this, the struct and then the struct name and then I put all this. There’s multiple ways to do this stuff and I’m going to try to show you a couple of ways so you can understand. If I wanted to start using this I would actually want to put this next line in here which is telling me that I’m creating a new type of this struct called student person and then I want to go and use it. But there is also another way to do it which is even easier than this and that is by using the type def. up here. So I can just do type def. and now I don’t need this line anymore.
Fr. Robert: We’ve seen this kind of collection in higher level languages and typically it would be a class.
Lou: Right exactly. Again structs are made to be value type so they are very mean and lean and again you can pass them around by using pointers and it allows you to then pass the original value. I should show an example of that what that means. Why you might want to actually pass an instance of this around versus just a copy of it. Because it doesn’t make sense exactly to just pass a copy. So a good example is that I’ll show you real quick is what we like to call pass by reference or pass by value. I’m going to create 2 little functions here that have pass by reference or pass by value and the key here is the first one is not going to use a pointer. It is just going to say I got an instance of this thing and I’m going to pass it and I’m going to set the height. Then the second function is saying ok I’m going to pass it but instead this time I’m going to use a pointer and I’m just going to pass the memory location of it and then I’m going to change the height of it. I’m showing you 2 ways to actually access here; 1 is called the dot reference or the memory operator is this little dot right here and the other one is called this structure pointer operator and that allows me to go and say I have a memory location, let me go and get this member of that actual object that’s at that memory location and set the value.
Fr. Robert: Right.
Lou: We’ll show you exactly what happens now if I actually create… Down here in my application I’m going to delete all this so you can actually see stuff and I’m going to create what we call an instance of this person called person 2 and I’m going to set their name to be change old names and I’m going to give them the age of 19 and their height of 65. I’m creating an instance of struct and I’m initializing some of the variables on there. Again this is very similar as we talked about in an array. I did the exact same thing for an array where I just used these little curly braces and initialized it. So now the first thing I want to do is pass it by value. Let’s see what happens. What I’m doing here is I’m passing the value and I’m going to print out the height in inches after it’s done so I’m going to use the debugger and this’ll be 1 step at a time so let’s see what happens here. The first thing that happens is I’m going to step into the application and I’m passing this by value so what happens is I’m going to set the value and height to inches. So what you’ll see right now is the height in inches and it’s really tiny on the screen – I apologize.
Fr. Robert: Actually Zach can you zoom into that?
Lou: What the debugger is showing you is the value right now is 65 right because I told them that the height of this person is 65 in inches. What I’m going to do is change it to 10. So once I’m done with this now this is 10. Now I’m going to pop out of this function and I’m going to come back down to print and what you’ll see is what actually prints out is 65. The reason is because I didn’t actually pass the actual instance of it which is this guy right here. I passed a copy of it so when I got inside this function it changed the value to 10 and when I popped out of that function it went right back to 65 because I don’t have the same copy evidently.
Fr. Robert: That’s actually a perfect example of when you’d want to use it because if you want these changes to actually affect the value that you’re going to display later on you can’t just pass a copy, you’d better pass the reference.
Lou: Exactly right. That kind of sag ways into the 2nd part. The 2nd part is now instead of passing it by value now I’m going to pass it by reference meaning now I’m going to go and grab the memory location of it and I’m going to pass by reference. Basically I’m passing it in a pointer which is this guy – a memory location and then I’m going to change it. So let’s look what happens now. I’m going to break point right here. That lets me stop, that’s the “I” reference and again we have this guy right here and then… oops I don’t want 2 continues here. Then let’s step into this guy. Now the value again if you look at this again our value is going to still be 65. Again it is really tiny down here but it says height, inches 65. Then we’re going to step into this pass by reference. We step in, again we’re going to change, we’re using this little point operator but we’re going to change the height in inches to 10 but when we pop back out now and I print it to screen what you’re going to see is the student’s height is 10.
Fr. Robert: That’s exactly what we want.
Lou: That’s right. The key here is I was actually passing or copying that data, I wasn’t making an exact copy of it. I was…whatever the size of that instance of that struct is or that type I wasn’t copying it over into another portion of memory and then changing a value and then when I was popping it back out I was again back to my original value. I was actually taking that original instance, getting the memory location of it and saying I’m just going to pass this number to it and then the application, the function is going to know that I’m going to take that number and actually set a value at that memory location. That’s what it was doing so when I popped back out now I have a new value. That’s kind of the key.
Fr. Robert: Let’s flip it around a little bit because now we know why you would want to pass by reference rather than just passing a copy. When wouldn’t you want to do that? When would you want to not give them the pointer because you’d be changing the original data?
Lou: That’s a good question. I think when you wouldn’t want to do this is if you were like for instance – you had a separate function that would go and do some operation but then you wanted to kind of go back to the original value when you came back out. For instance if I had a long list of students and I needed to calculate something, like for instance I needed to calculate what their bill is going to be. So if I passed an instance of a student in and then this application would go and get how much they owed and calculate it and print it to screen and then it would pop back out and loop through to the next student. The key here is if I was passing by reference it would actually change that student object over and over again to that value. So when you’re actually printing you’d find out that oh wait I said passing by reference. It’s actually showing the student’s name and address and what they owe for the same student over and over again. But if I actually pass by copy I’m just copying the data in there and then I’m doing something with it and then when I pop back out I can set a new value. That’s kind of the key. It’s all dependent on what your application is doing and when you actually want to pass the actual thing or when you just want to do something separate over here and then come back and do your own thing again.
Fr. Robert: Right. The example that was often given to me is if you were trying to create a program that does say conversions to multiple types of currency you wouldn’t want to be passing the reference every time you do a conversion because then you’re changing the original number and every subsequent conversion is going to be off. You’d pass copies and each function would do the conversion and have its unique value. This is actually something that you can figure out when you’re in the logic tree step of writing your program. Do I need to preserve this function, do I need to preserve this value, this data or do I want it to be overridden because the new value is what every other function is going to use?
Lou: Right exactly. It’s a little confusing but as you start to use it you’ll understand. If you start to use the size of function it’s kind of cool because you’ll start to see that ok the size of my student type is actually x. So let’s say it is 12 bytes and then when I actually pass it by value you’ll notice now you’re copying that 12 bytes to another function and doing something else. So when you’re doing embedded programming especially it’s important because now you have 24 bytes worth of data that’s on your memory in your stack of memory and it is taking up double the amount. But when you’re passing it by reference you’re basically saying no I’m not going to copy it, I’m just going to pass the actual original version of it and so now I still only have 12 bytes of data. So that’s super important when you’re working with little devices like that.
Fr. Robert: Right. We’re actually going to be doing more projects using our do we know and using imbedded processors so yes it’s a good time to get into the proper way of handling your memory addressing. This is good programming. Be efficient with how you program and then you never have to worry about using more resources than you think you’re using.
Lou: Exactly. The very last thing before we kind of wrap up is I wanted to show how you can kind of set up similar… I have a student person here and I wanted to show you… sorry for my naming. I had a bunch of other types I wanted to create.
Brad: There’s a lot of persons in there Lou. A lot of persons.
Lou: Student persons. In this case I want to create a person but what you’ll notice here that instead of using arrays I’m actually using pointers. The key here is you can actually change them in this case. So when I initialize this I can actually initialize this to a 100 element character array and that’s kind of the key. So if I were to go and initialize something like a person down here now I can initialize this guy to a 100 character array. If I want to call him Bill now a character array is the same thing as a string in this case and now person has… if I were to look at the person’s first name it would actually be Bill. That’s kind of the key. That’s why I said arrays are closely related to pointers because they’re just copies of the same type over and over again. This is just 100 characters in a large array. But again I can declare a struct that has an attribute call for first name and again it is a pointer but it will point to an array when I initialize it. That’s kind of the key that they’re almost interchangeable in a way.
Fr. Robert: Right. Nice! Well Lou what do we want to leave our Code Monkeys with? Because this was a mini module so this was just a 2 episode hit of C. Now we will be coming back to C again and again because it really is a nice foundational language. It is a nice place to ground yourself and learn some of the more important foundational pieces but if we wanted to challenge them what would you do because again we do have to give them the code. We have to give them the assets that they’ve seen in this episode but what else would you want to tag on?
Lou: Get familiar. For me I like to print stuff to the screen. Just get yourself familiar with code. For instance get yourself familiar with writing in – lab, doing some variables, passing them by value like I showed, print them out, show the size of them and do that kind of thing. Just really kind of understand what’s happening with the application. What you’ll do is actually find you’ll type it wrong, maybe you’ll use the wrong dereferencer versus the referencer and you’ll find that that at some point you’ll get the compiler and the run time will say oh you have an access violation in memory and it’ll tell you why. It’s basically just trial and error. Just get yourself in there and get yourself used to using and programming. We just went through very basic concepts but now as you get really into complex C coding it just builds on top of those spaces. I think take the code that we have, muck with it and break it and the compiler will help you, especially if you do Visual Studio it will help you and give you very specific errors. Then just try some other stuff. Maybe put an array of people and then learn to go and use what they call loop and loop through that array. Just start building out the application and doing other things and you’ll get to feel more comfortable about it.
Fr. Robert: Fantastic. Lou Maresca, he is our code warrior and our super special guest co-host. Seriously we’ve got to do something about that Lou. Could you please tell the folks where they can find you, because of course you’re going to be all over the Twit TV network. I have you as a guest very often on This Week in Enterprise Tech. I do believe we’ve got some reviews in the can from you in Before You Buy so we’ll be seeing you there and of course you are often, almost always now on Coding 101. But where else can people go if they want to find out what you’ve been working on?
Lou: You can always find me on Twitter. LouMM and of course all my daily work that I do on my day job is at crm.dynamics.com.
Fr. Robert: Before we bid you farewell I do want to say that the next time you see us, because this episode is actually going to be going up on Monday the 13th or whatever it is but the day after we have the 10th year anniversary for Twit TV. We’re going to have Lou in studio and I believe we’re going to be recording a couple of episodes and hopefully by then we might have some good news Lou? Do you think?
Lou: Yes. I’m super excited.
Fr. Robert: We should talk about that.
Lou: A 10 year anniversary too.
Fr. Robert: Right, it’s perfect. Everything is perfect. So good news coming and I think it’s going to involve LouMM. Lou Maresca we salute you sir for being our code warrior, for being the constant presence of knowledge here for Coding 101.
Lou: I love being here. Thanks so much.
Fr. Robert: Folks we want to thank you for sticking with us. We will be here every Monday. Well except for this pre-recording and any other pre-recording we do in the future. You’re going to find us at 2:30 PM Pacific time at live.twit.tv and as long as you’re going to join us live why not jump into our chatroom at irc.twit.tv. It’s a place where you can ask question, you can tell us whether or not you’re getting the material that we’re laying down and this is very important. When you tell us that you’re not understanding what we’re talking about it gives us a chance to back up and say we should probably explain that – that concept, that thing, that component. So jump in, that’s right, live.twit.tv and irc.twit.tv. Don’t forget that you can always go to our show page at twit.tv/code or coding 101. It always goes to the same place. Here you’ll find our entire back inventory of episodes so if you want to download a previous module, if you want to look at what we did with C Sharp – actually a couple of modules or with PHP or with Pearl you’re going to be able to get it right here and you’ll also find a place where you can subscribe so you get every episode automatically to your device of choice. It’s one of the things that we do because well, we love you. Don’t forget that we’ve got a very active Google Plus group. Just go to Google Plus and look for Coding 101. It’s a great place to go if you have knowledge that you want to give or if you have questions that you want to ask. But don’t worry about it if you can’t find that because you can also find me on Twitter. Just go to twitter.com/padresj, that’s @padresj and you’ll be able to ask me questions about the episodes, about the guests and suggest future languages that you want to learn and future concepts that you want us to talk about. Don’t forget that is twitter.com/padresj or in this case you can find out what happens when people on Wednesday try to wake me up. That’s right, just go back to bed. The next time we see you will be on 4 20. Until then I’m father Robert Ballecer. This is Coding 101. End of line!