A question on variable defination

S

sunnylele

Hi, all,

a question on the following defination:
an external function is defined as:
nmriopen(char *const filename, const int np1, const float step1,
const int np2, const float step2)

what's the difference if it is defined as:
nmriopen(char filename, int np1, float step1,
int np2, float step2)

and what if use "int *const np1" instead of "const int np1"?

Thanks!

Jing
 
P

pete

sunnylele said:
Hi, all,

a question on the following defination:
an external function is defined as:
nmriopen(char *const filename, const int np1, const float step1,
const int np2, const float step2)

what's the difference if it is defined as:
nmriopen(char filename, int np1, float step1,
int np2, float step2)

and what if use "int *const np1" instead of "const int np1"?

const qualified arguments
don't mean anything to the function caller.
const qualified arguments
only affect the way that the function definition must be written.
 
E

Eric Sosman

sunnylele wrote On 03/31/06 13:11,:
Hi, all,

a question on the following defination:
an external function is defined as:
nmriopen(char *const filename, const int np1, const float step1,
const int np2, const float step2)

what's the difference if it is defined as:
nmriopen(char filename, int np1, float step1,
int np2, float step2)

I assume you mean `char *filename' rather than
`char filename'.

The `const' keyword amounts to a promise (but a weak
one, because it can be circumvented) that the program will
not write to the `const'-qualified object. For your `int'
and `float' arguments, it means that the compiler will
object if you try to change their values within the body
of the function. Such changes cannot affect the caller,
of course, so the "protection" isn't worth much -- but it's
there if you want it.

For the pointer argument things are a little different,
because the thing that is `const' isn't the pointer value
itself, but the thing it points at. (In this case; it's
possible to get the other effect instead, or in addition.)
That *is* a matter of interest to the caller, because the
function has promised (weakly) not to change the contents
of the string the argument presumably points to. The
caller can do things like

char[] myfile = ...;
if (nmriopen(myfile, 1, 0.01, 42, 98.6) < 0)
fprintf(stderr, "nmriopen failed for %s\n",
myfile);

.... without worrying that nmriopen() will change what's in
myfile[] and thus make nonsense of the error message.
and what if use "int *const np1" instead of "const int np1"?

A similar effect: The function promises (weakly) not to
use the pointer `np1' to change the value that it points at.
 
E

Eric Sosman

Eric Sosman wrote On 03/31/06 14:08,:

[... a bunch of nonsense he regrets ...]
sunnylele wrote On 03/31/06 13:11,:
Hi, all,

a question on the following defination:
an external function is defined as:
nmriopen(char *const filename, const int np1, const float step1,
const int np2, const float step2)

what's the difference if it is defined as:
nmriopen(char filename, int np1, float step1,
int np2, float step2)


I assume you mean `char *filename' rather than
`char filename'.

[...]
For the pointer argument things are a little different,
because the thing that is `const' isn't the pointer value
itself, but the thing it points at. (In this case; it's
possible to get the other effect instead, or in addition.)

Ahh, blagnabbit! I mis-read your declaration, and made
a fool of myself. `char * const filename' is a pointer to
`char', where the pointed-to `char' is modifiable but the
pointer variable itself is not. As with the other `const'-
qualified arguments, this is not terribly useful. (Hence
seldom used, hence unfamiliar, hence easily mis-read by
overconfident shoot-from-the-hip people ...)
A similar effect: The function promises (weakly) not to
use the pointer `np1' to change the value that it points at.

Same mistake by yours truly: The pointer variable `np1'
is unchangeable, but the integer that it points to can be
modified.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top