On Aug 30, 6:01 am, MN <mazouz.nezh... @gmail.comwrote :
I have a question :
How to understand the mean of char** type ?
Well, it's a pointer to a pointer to a char. So if char * can
represent a string, char ** points to multiple strings. For example,
to define an array of strings one would usually:
char *arr[] = { "one", "two", "three" };
If you want more clarification you need to be more specific in your
post :P
I have a question :
How to understand the mean of char** type ?
char is a type - objects of that type are 1 byte in size and can contain as
their value any single member of the execution character set.
char * is a type - objects of that type are sizeof(char *) bytes in size,
and can contain as their value the address of a single char.
char ** is a type - objects of that type are sizeof(char **) bytes in size,
and can contain as their value the address of a single char *.
What is the question behind the question?
--
Richard Heathfield <http://www.cpax.org.uk >
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999
On Aug 30, 2:55 pm, Richard Heathfield <r...@see.sig.i nvalidwrote:
MN said:
>
I have a question :
How to understand the mean of char** type ?
>
char is a type - objects of that type are 1 byte in size and can contain as
their value any single member of the execution character set.
>
char * is a type - objects of that type are sizeof(char *) bytes in size,
and can contain as their value the address of a single char.
>
char ** is a type - objects of that type are sizeof(char **) bytes in size,
and can contain as their value the address of a single char *.
>
What is the question behind the question?
>
--
Richard Heathfield <http://www.cpax.org.uk >
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999
the question is :
I have a function which returns an array of chars with 2 dimensions.
The size of array is dynamically changed by malloc.
To return this array I must declare it as an extern in the header file
like this: extern char** array.
if I use extern char* array, I get error.
On Aug 30, 2:55 pm, Richard Heathfield <r...@see.sig.i nvalidwrote:
>MN said:
>>
>>I have a question :
>>How to understand the mean of char** type ?
>char is a type - objects of that type are 1 byte in size and can contain as
>their value any single member of the execution character set.
>>
>char * is a type - objects of that type are sizeof(char *) bytes in size,
>and can contain as their value the address of a single char.
>>
>char ** is a type - objects of that type are sizeof(char **) bytes in size,
>and can contain as their value the address of a single char *.
>>
>What is the question behind the question?
>>
>--
>Richard Heathfield <http://www.cpax.org.uk >
>Email: -http://www. +rjh@
>Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
>"Usenet is a strange place" - dmr 29 July 1999
>
the question is :
I have a function which returns an array of chars with 2 dimensions.
The size of array is dynamically changed by malloc.
I don't understand what you mean.
Does your function create the array
and then the calling function changes the size of the array,
or
does your function receive the address of an array as a argument
and then change the size of it?
To return this array I must declare it as an extern in the header file
like this: extern char** array.
if I use extern char* array, I get error.
the question is :
I have a function which returns an array of chars with 2 dimensions.
The size of array is dynamically changed by malloc.
To return this array I must declare it as an extern in the header file
like this: extern char** array.
if I use extern char* array, I get error.
Multidimensiona l arrays aren't implemented well in C.
One way of doing them is to declare a 2d array
char array[10][10];
but this is fixed. The other way is to declare a list of pointers to
pointers
I have a question :
How to understand the mean of char** type ?
In your later followup, you said you had a function returning an
array. (Actually, a function can't directly return an array.)
Read section 6 of the comp.lang.c FAQ, <http://www.c-faq.com/>.
--
Keith Thompson (The_Other_Keit h) kst-u@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
On Sat, 30 Aug 2008 10:55:21 +0000, Richard Heathfield
<rjh@see.sig.in validwrote:
>MN said:
>
>I have a question :
>How to understand the mean of char** type ?
>
>char is a type - objects of that type are 1 byte in size and can contain as
>their value any single member of the execution character set.
char is an integer type and an object of that type can contain any
value between CHAR_MIN and CHAR_MAX, inclusive (independent of whether
the value represents a member of the execution character set).
>
>char * is a type - objects of that type are sizeof(char *) bytes in size,
>and can contain as their value the address of a single char.
>
>char ** is a type - objects of that type are sizeof(char **) bytes in size,
>and can contain as their value the address of a single char *.
>
>What is the question behind the question?
On Sat, 30 Aug 2008 05:07:54 -0700 (PDT), MN
<mazouz.nezhate @gmail.comwrote :
>On Aug 30, 2:55 pm, Richard Heathfield <r...@see.sig.i nvalidwrote:
snip
>What is the question behind the question?
>>
>--
>Richard Heathfield <http://www.cpax.org.uk >
>Email: -http://www. +rjh@
>Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
>"Usenet is a strange place" - dmr 29 July 1999
Please don't quote signatures (the previous 5 lines).
>
>the question is :
>I have a function which returns an array of chars with 2 dimensions.
>The size of array is dynamically changed by malloc.
>To return this array I must declare it as an extern in the header file
>like this: extern char** array.
>if I use extern char* array, I get error.
I assume you meant dynamically allocated instead of changed.
The return type for your function depends on the method you use to
allocate the array.
One popular method is to dynamically allocate space for a number
of pointers to char (corresponding to each row of your array). Then
allocate space for each of those pointers to hold the number of
characters in each row. This will allow you to refer to an array
element using normal subscript notation of the form array[i][j]. In
this case, you would indeed return a char** (which would point to the
first allocated space).
Another popular method is to compute the total amount of space
needed for the array and allocate it in a single block. You then
refer to the j-th element in the i-th row with syntax of the form
array[i*number_of_col umns+j]. In this case, your function would
return a char* which would point to element [0][0].
On Aug 31, 5:19 am, Barry Schwarz <schwa...@dqel. comwrote:
On Sat, 30 Aug 2008 05:07:54 -0700 (PDT), MN
>
One popular method is to dynamically allocate space for a number
of pointers to char (corresponding to each row of your array). Then
allocate space for each of those pointers to hold the number of
characters in each row. This will allow you to refer to an array
element using normal subscript notation of the form array[i][j]. In
this case, you would indeed return a char** (which would point to the
first allocated space).
>
What I want is to use this method. Can you give a small function's
code example?
Thanks for your help
On Sat, 30 Aug 2008 10:55:21 +0000, Richard Heathfield
<rjh@see.sig.in validwrote:
>>MN said:
>>
>>I have a question :
>>How to understand the mean of char** type ?
>>
>>char is a type - objects of that type are 1 byte in size and can contain as
>>their value any single member of the execution character set.
>
char is an integer type and an object of that type can contain any
value between CHAR_MIN and CHAR_MAX, inclusive (independent of whether
the value represents a member of the execution character set).
[...]
If I'm reading C99 5.2.1 correctly, the execution character set *is*
the complete set of values from CHAR_MIN to CHAR_MAX. (This is
distinct from the "basic execution character set".)
--
Keith Thompson (The_Other_Keit h) kst-u@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
On Sun, 31 Aug 2008 01:23:20 -0700, Keith Thompson wrote:
If I'm reading C99 5.2.1 correctly, the execution character set *is* the
complete set of values from CHAR_MIN to CHAR_MAX. (This is distinct
from the "basic execution character set".)
The execution character set may also contain multi-byte characters, so the
set of values from CHAR_MIN to CHAR_MAX cannot be the complete set. I am
not sure what is, though.
On Sun, 31 Aug 2008 01:23:20 -0700, Keith Thompson wrote:
>If I'm reading C99 5.2.1 correctly, the execution character set *is* the
>complete set of values from CHAR_MIN to CHAR_MAX. (This is distinct
>from the "basic execution character set".)
>
The execution character set may also contain multi-byte characters, so the
set of values from CHAR_MIN to CHAR_MAX cannot be the complete set. I am
not sure what is, though.
I believe you're right. But the range of values in the range CHAR_MIN
to CHAR_MAX is a subset of the execution character set. (Any other
members are local-specific.)
--
Keith Thompson (The_Other_Keit h) kst-u@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Comment