Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ For Dummies (2004) [eng].pdf
Скачиваний:
84
Добавлен:
16.08.2013
Размер:
8.09 Mб
Скачать

Chapter 8

Taking a First Look at C++ Pointers

In This Chapter

Addressing variables in memory

Declaring and using pointer variables

Recognizing the inherent dangers of pointers

Passing pointers to functions

Allocating objects off the heap (whatever that is)

So far, the C++ language has been fairly conventional compared with other programming languages. Sure, some computer languages lack (il-)logical operators (see Chapter 4 for more) and C++ has its own unique symbols, but

there’s nothing new in the way of concepts. C++ really separates itself from the crowd in definition and use of pointer variables. A pointer is a variable that “points at” other variables. I realize that’s a circular argument, but let me put it this way: A pointer variable contains the address of a variable in memory.

This chapter introduces the pointer variable type. It begins with some con­ cept definitions, flows through pointer syntax, and then introduces some of the reasons for the pointer mania that grips the C++ programming world.

Variable Size

My weight goes up and down all the time, but here I’m really referring to the size of a variable, not my own variable size. Memory is measured in bytes or bits. The following program gives you the size of the different variable types:

// VariableSize - output the size of each type of // variable

#include <cstdio> #include <cstdlib>

#include <iostream> using namespace std;

int main(int nNumberofArgs, char* pszArgs[])

110 Part II: Becoming a Functional C++ Programmer

{

bool b; char c; int n; long l; float f; double d;

cout << “sizeof a bool = “ << sizeof b << endl; cout << “sizeof a char = “ << sizeof c << endl;

cout << “sizeof an int = “ << sizeof n << endl; cout << “sizeof a long = “ << sizeof l << endl; cout << “sizeof a float = “ << sizeof f << endl; cout << “sizeof a double= “ << sizeof d << endl;

//wait until user is ready before terminating program

//to allow the user to see the program results system(“PAUSE”);

return 0;

}

sizeof is actually a C++ construct that returns the size of its argument in bytes. The variable size program generates the following output:

sizeof a bool = 1 sizeof a char = 1 sizeof an int = 4 sizeof a long = 4 sizeof a float = 4 sizeof a double= 8

Press any key to continue . . .

Don’t be concerned if the compiler that you’re using generates different results. For example, you may find that an int is smaller than a long. C++ doesn’t say exactly how big a variable type must be; it just says that a long is the same size as or larger than an int and that a double is the same size as or larger than a float. The sizes output by the VariableSize program are typical for a 32-bit processor such as the Pentium class processors.

What’s in an Address?

Like the saying goes: “Everyone has to be somewhere.” Every C++ variable is stored somewhere in the computer’s memory. Memory is broken into individ­ ual bytes with each byte carrying its own address numbered 0, 1, 2, and so on.

A variable intReader might be at address 0x100, whereas floatReader might be over at location 0x180. (By convention, memory addresses are expressed in hexadecimal.) Of course, intReader and floatReader might

Chapter 8: Taking a First Look at C++ Pointers 111

be somewhere else in memory entirely — only the computer knows for sure and only at the time that the program is executed.

This is somewhat analogous to a hotel. When you make your reservation, you may be assigned room 0x100. (I know that suite numbers are normally not expressed in hexadecimal, but bear with me.) Your buddy may be assigned 80 doors down in room 0x180. Each variable is assigned an address when it is created (more on that later in this chapter when we talk about scope).

Address Operators

The two pointer-related operators are shown in Table 8-1. The & operator says “tell me your hotel address,” and * says “his address is.”

Table 8-1

Pointer Operators

Operator

Meaning

& (unary)

The address of

 

 

* (unary)

(In an expression) the thing pointed at by

 

 

* (unary)

(In a declaration) pointer to

 

 

The following Layout program demonstrates how the & operator displays the layout of memory variables in memory:

//Layout - this program tries to give the

//reader an idea of the layout of

//local memory in her compiler #include <cstdio>

#include <cstdlib> #include <iostream> using namespace std;

int main(int nNumberofArgs, char* pszArgs[])

{

int end; int n; long l; float f; double d;

// set output to hex mode cout.setf(ios::hex); cout.unsetf(ios::dec);