26277 total geeks with 3498 solutions
Recent challengers:
 Welcome, you are an anonymous user! [register] [login] Get a yourname@osix.net email address 

Articles

GEEK

User's box
Username:
Password:

Forgot password?
New account

Shoutbox
MaxMouse
It's Friday... That's good enough for me!
CodeX
non stop lolz here but thats soon to end thanks to uni, surely the rest of the world is going good?
stabat
how things are going guys? Here... boring...
CodeX
I must be going wrong on the password lengths then, as long as it was done on ECB
MaxMouse
lol... the key is in hex (MD5: of the string "doit" without the "'s) and is in lower case. Maybe i should have submitted this as a challenge!

Donate
Donate and help us fund new challenges
Donate!
Due Date: May 31
May Goal: $40.00
Gross: $0.00
Net Balance: $0.00
Left to go: $40.00
Contributors


News Feeds
The Register
Google builds
crowdsourcing into
new Maps code stack
Google"s Native
Code browser tech
goes cross-platform
Yahoo! to "share
something special"
in New York on
Monday
Adobe"s Creative
Cloud fails at
being a cloud
NASA signs off on
sampling mission to
Earth-threatening
asteroid
US military
welcomes Apple iOS
6 kit onto its
networks
Jailed Romanian
hacker repents,
invents ATM
security scheme
Climate scientists
agree: Humans cause
global warming
MIT takes
battery-powered
robot cheetah for a
gallop
Google research
chief: "Emergent
artificial
intelligence?
Hogwash!"
Slashdot
Electronics-Loving
"Crazy Ants"
Invading Southern
US
Intel Rolls Out
"Beacon Mountain"
Android Dev
Platform For Atom
Fed. Appeals Court
Says Police Need
Warrant to Search
Phone
UK Consumers
Reporting
Contactless Payment
Errors
FBI Considers CALEA
II: Mandatory
Wiretapping On
Every Device
Bloomberg To HS
Grads: Be a Plumber
Of 1000 Americans
Polled, Most Would
Ban Home Printing
of Guns
Happy Culture
Freedom Day!
RPiCluster: Another
Raspberry Pi
Cluster, With Neat
Tricks
NASA
Meteoroid-Spotting
Program Captures
Brightest-Yet Moon
Impact
Article viewer

Basic C++ Pointer Theory



Written by:dimport
Published by:Nightscript
Published on:2003-06-21 07:19:46
Topic:C
Search OSI about C.More articles by dimport.
 viewed 12969 times send this article printer friendly

Digg this!
    Rate this article :
Over the past few weeks I’ve heard several people say they’ve tried to learn c++ but get stuck at pointers and give up, its a much talked about concept, some people say its only necessary to know referencing as opposed to pointers, some say the way c++ handles pointers is awful, either way to become a proficient c++ programmer you need to understand pointers.

Best place to start is the beginning, a pointer, is basically a variable that holds the address in memory of another variable, pointers use two key operators the & operator, which is used to assign an address to a variable, and the * operator (yes its the multiplication operator, the compiler knows which to use based on l and r values, its all in the operands), to demonstrate this:

 int main()
{
    int demonstrate = 5; //declares an int
    int *pPointer = &demonstrate; //declares a pointer to an int and assigns the address of demonstrate to a pointer
    cout << demonstrate << endl; //outputs the value of demonstrate
    cout << &demonstrate << endl; //outputs the value of demonstrate
    cout << *pPointer << endl; //outputs whatever’s stored at the pointers address
    return 0;
}


What's important here is to remember you can only point to the type you’ve declared your pointer as, an int cant point to a char and so on.
Its also possible to manipulate a variable directly via its address:

 int main()
{
    int demonstrate = 5; //declares an int
    int *pPointer = &demonstrate; //declares a pointer to an int and assigns the address of demonstrate to a pointer
    cout << demonstrate << endl; //outputs the value of demonstrate before manipulation
    *pPointer = demonstrate; //reassigns the pointer to the value itself
    *pPointer = 6; //modifies the value stored in demonstrate
    cout << demonstrate << endl; //outputs the modified value
    return 0;
}


All very good and well, but why the arse would you want to do any of this ? One of the primary uses for pointers is manipulating the heap, or free store, to create variables accessible by any function, thus eliminating scope issues, to create variables on the heap we use the 'new' keyword, and to delete what we created, we use the 'delete' keyword:

 int main()
{
    int *pHeap = new int; //declares an int on the heap
     if (pHeap == NULL) //error checking
    {
        cout << "b0rked" << endl;
        return 0;
    }
     *pHeap = 7; //gives the pointer a value
    cout << *pHeap << endl;
    delete pHeap; //deletes the value held the pointer can now point to something else
    return 0;
}


You may have heard the term ‘memory leak’ in the context of pointers, a memory leak occurs when you redefine a pointer without deleting what was originally stored there, consider our last program:

*pHeap = 7; //gives the pointer a value
cout << *pHeap << endl;
pHeap = new int; //reassigned without being freed
*pHeap = 8;
cout << *pHeap << endl;

So now the place in memory where the value of ‘7’ was held is now inaccessible, the memory is lost until the program finishes, the memory has been leaked.

This article was originally written by Pigsbig78

Did you like this article? There are hundreds more.

Comments:
<none>
Anonymously add a comment: (or register here)
(registration is really fast and we send you no spam)
BB Code is enabled.
Captcha Number:


Blogs: (People who have posted blogs on this subject..)
amisauv
Creating a Lexical Analyzer in C on Tue 9th Dec 11am
#include<stdio.h> #include<string.h> #include<conio.h> #include<ctype.h> /*************************************** ************************* Functions prototype. **************************************** *************************/ void Open_File(
amisauv
Controling digital circuit through computer on Tue 9th Dec 10am
this code access the lpt port.here only 4 of the total 8 pins are used but can be modified for full 8 pins.it has a complete GUI with mouse & keyboard interactive control panel.works well in win98, but not in winxp. #include<stdio.h> #include<conio.
amisauv
/* Computerised Electrical Equipment Control */ /* PC BASED DEVICE CONTROLLER * on Tue 9th Dec 10am
#include<stdio.h> #include<conio.h> #include<dos.h> void main() { void tone(void); int p=0x0378; char ex={"Created By Mrc"}; int j; char ex1={"For Further Details & Improvements"}; int k; char ex2={"Contact : E-mail : anbudan
amisauv
Calendar Program on Tue 9th Dec 10am
This program prints Weekdays of specified date. It even prints calendar of a given year too. /*Ccalendar library*/ #include<stdio.h> #include<string.h> #include<conio.h> int getNumberOfDays(int month,int year) { switch(month) { case
amisauv
Calculator: on Tue 9th Dec 10am
#include"graphics.h" #include"dos.h" #include"stdio.h" #include"math.h" union REGS i,o; char text={ "7","8","9","*","4","5","6","/","1","2", "3","+","0","00",".","-","M","M+", "M-","+/-","MR","MC","x^2","sr","OFF","A C","CE","="}; int s=0,k=0,pass
amisauv
INFECTED CODES WRITTEN IN C\C++ on Tue 9th Dec 10am
This is a simple code that changes system time and date. It is written using c/c++ but can be easily converted to java. #include "stdio.h" #include "process.h" #include "dos.h" int main(void) { struct date new_date; struct date old_date; s
amisauv
A C programme which can print the file name it is kept in on Tue 9th Dec 9am
#include<stdio.h> main(){ printf(”the source file name is %s\n”,__FILE__); } actually __FILE__ is a macro which stands for the file name the programme is kept in and the compiler does the rest .. for you ..
amisauv
BOOTSECTOR EDITOR: on Tue 9th Dec 9am
Code : /*program to save the partion table of your hard disk for future use. it will save your partition table in a file partition.dat */ #include<stdio.h> #include<bios.h> #include<conio.h> #include<stdlib.h> #include<ctype.h> void main () {
amisauv
BLINKING STAR : on Tue 9th Dec 9am
#include<conio.h> #include<graphics.h> #include<stdlib.h> #include<dos.h> void main() { int gdriver=DETECT,gmode; int i,x,y; initgraph(&gdriver,&gmode,"e: cgi"); while(!kbhit()) { x=random(640); y=random(480); setcolor
amisauv
// To print semicolons using C programming without using semicolons any where i on Tue 9th Dec 9am
// To print semicolons using C programming without using semicolons any where in the C code in program. // #include<stdio.h> #include<conio.h> void main() { char a; a=59; if(printf("%c",a)){} getch();

Test Yourself: (why not try testing your skill on this subject? Clicking the link will start the test.)
BSD sockets API by skrye

This is a test of your knowledge of the BSD socket interface
C Programming by keoki

This test is aimed at a C programmer that is at an intermediate level.


     
Your Ad Here
 
Copyright Open Source Institute, 2006