Please don't top-post. Put what you're replying below what you cite
from the previous post.
Ernst Schmidtmann <do*******@ulcus.owl.dewrote:
1. Mhmm. If I allocate memory to a pointer, can I use this pointer
without defining an array?
You don't allocate "momory to a pointer", you allocate memory and
assign the address you receive from malloc() to a pointer. And
yes, of course, you can then use the pointer to access the
memory you allocated in an array-like fashion using the pointer.
I think, array is a pointer to the first element of the array.
Definitely not. An array is an array, not a pointer. Only when
the compiler finds an array in a place where a value is required
the array is replaced by a pointer to the first element of the
array. This happens e.g. when an array is used as a function
argument since in C all function arguments are passed by value
but an array isn't a value. And thus in this situation it gets
converted to a value, which is the address of its first element.
Memory
size from malloc and list[] is the same. Does the compiler have to
know the size of an element in the array?
If you create an array the compiler alreays knows the size
of the elements from the type of the array. But if you call
malloc() you need to tell malloc() exactly how much memory
you need, e.g. for enough memory to store 75 ints you do
int *ip;
ip = malloc( 75 * sizeof *ip );
where 'sizeof *ip' is the number of bytes required for the
type 'ip' points to, in this case the number of bytes needed
to store an int.
2. In the past I took integer arguments from the commandline by
defining argv[] as int. Well, there is a problem with argv[0], because
it is definitely the name of the program. But if I don't use it?
Then you did something wrong. The elements of argv are all
pointers to strings, pointing to strings with the command
line arguments (except argv[0] and the very last element,
which is always NULL). So if your first command line argu-
ment was 2 then argv[1] points to the string "2". And if
you now do
int max = *argv[1];
then you assign to 'max' the numerical value of the character
'2' and _not_ the integer value 2. And if the command line
argument had been 75 the argv[1] would point to the string
"75" and with the above assignment you would assign the
numerical value of the character '7' to 'max' and neither
the integer value 7 nor 75. You first have to convert the
string you got to an integer, using e.g. strtol().
3. I am not really sure, if I need a variable length array.
If you need memory with a size that only can be determined at
run-time and not already when the program gets compiled then
you either need a variable length array (which requires a com-
piler that implements at least this part of C99) or you must
obtain the memory via malloc().
Regards, Jens
--
\ Jens Thoms Toerring ___
jt@toerring.de
\__________________________
http://toerring.de