Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Re: How is memory allocated

Reply
Thread Tools

Re: How is memory allocated

 
 
Emmanuel Delahaye
Guest
Posts: n/a
 
      06-27-2003
In 'comp.lang.c', http://www.velocityreviews.com/forums/(E-Mail Removed) (Samuel Thomas) wrote:

To answer the question of your subject line, the memory is allocated in a
implementation-dependent way.

> Could you please go through the code I wrote and help me with my
> doubts?
>
> #include <stdio.h>
> #include <conio.h>


Non standard header.

> void printnamefirst(char[]);
> void printnamesec(char[]);
>
> void main()


main returns inbt. Always. Even the old notation (pre-ANSI, aka K&R):

main()

implies a implicit return type of int. Note that 'void' is a new concept
brought with the first release of the standard C (aka ANSI-C89 or ISO-C90).

> {
> clrscr();


Non standard function.

> printnamefirst(name);
> }
>
> void printnamefirst(char nm[])
> {
> char nam[20] ="Samuej Thomas";
> printnamesec(nam);
> printf("%s \n",nam);
> }
>
> void printnamesec(char ns[])
> {
> printf("%s \n",ns);
> ns[5]='l';
>
> }
>
> 1.Is it safe to use the variables that are allocated in one function,
> in another function as I have done by printing a string in the
> printnamesec, but which has been declared in printnamefirst function?
> When does it become unsafe to use variables declared in one function
> else where?


say a() call b().

It is safe to define a variable in a() and to pass its address to b().

void a (void)
{
int x;
b(&x);
}

It is unsafe to define a variable in b() and to return its address to a():

int *b(void)
{
int x = 123;

return &x;
}

> 2.Is it possible to make 'pass by value' work with character strings
> so that they dont get changed? Do they always get passed as reference


For a string (array of char), the passed value is an address. The parameter
is a pointer of the correct type. You can use the 'const' qualifier to inform
the compiler that:

- The function will not change the original value of the string
- Constant strings (e.g. string literals) are accepted.

f (char const *s)
{
}

> values when passed across functions? Does the value of the nam
> variable declared in printnamefirst get modified because of the 'pass
> by reference' mechanism?


No, for the simple reason that there is no pass-by-reference in C.

--
-ed- (E-Mail Removed) [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-library: http://www.dinkumware.com/htm_cl/index.html
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
How to check memory size allocated to JVM? Laura Heinzmann Java 1 02-16-2005 04:37 AM
Dynamically Allocated Memory vs. Statically allocated Memory csnerd@gmail.com C++ 5 12-09-2004 01:44 AM
How do I know if memory is already allocated? Kjell Arne Johansen C++ 8 09-02-2003 06:12 AM
Duplicate memory allocated by IndexedTriangleArray Duncan Java 0 07-21-2003 07:25 PM



Advertisments