Originally Posted by
Kramer55
Another quick question, what is the point of having size_t in this code?
I know it returns the size, but what is the point of having the size?
It doesn't "return" the size. A size_t is a type, an unsigned integral type. The result of the sizeof operator has type size_t.
http://www.lysator.liu.se/c/rat/c3.html#3-3-3-4:
The type of sizeof, whatever it is, is published (in the library header <stddef.h>) as size_t, since it is useful for the programmer to be able to refer to this type. This requirement implicitly restricts size_t to be a synonym for an existing unsigned integer type, thus quashing any notion that the largest declarable object might be too big to span even with an unsigned long. This also restricts the maximum number of elements that may be declared in an array, since for any array a of N elements,
N == sizeof(a)/sizeof(a[0])
Thus size_t is also a convenient type for array sizes, and is so used in several library functions. (See §4.9.8.1, §4.9.8.2, §4.10.3.1, etc.)
It is suited to an example more like this.
Code:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10};
for ( size_t i = 0; i < sizeof array / sizeof array[0] ; ++i )
{
cout << array[i] << endl;
}
return 0;
}
Then you don't need to hard-code the array size in both the definition and the loop.
[edit]
Originally Posted by
Tronic
When you have this code:
Code:
for(int i = 0; i < i < 10; i++)
{
}
It will iterate 10 times, or more specifically, every time i is less than the value 10, and greater than or equal to the value of zero. Sometimes people confuse the "byte size" of a variable, with the "max-value" of a variable.
Say you have the code..
Code:
#include <iostream>
#include <conio.h>
int main()
{
char *name;
std::cout << "Enter in name\n"
<< "> ";
std::cin >> name;
for(char *c = name; *c < sizeof(name); c+=sizeof(char))
{
std::cout << *c;
}
getch();
return 0;
}
What a train wreck of an example.