Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > char**

Reply
Thread Tools

char**

 
 
MN
Guest
Posts: n/a
 
      08-30-2008
I have a question :
How to understand the mean of char** type ?
 
Reply With Quote
 
 
 
 
zzt256@gmail.com
Guest
Posts: n/a
 
      08-30-2008
On Aug 30, 6:01*am, MN <(E-Mail Removed)> wrote:
> 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
 
Reply With Quote
 
 
 
 
MN
Guest
Posts: n/a
 
      08-30-2008
On Aug 30, 2:55 pm, Richard Heathfield <(E-Mail Removed)> wrote:
> 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.
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      08-30-2008
MN <(E-Mail Removed)> writes:
> 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_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <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"
 
Reply With Quote
 
Barry Schwarz
Guest
Posts: n/a
 
      08-31-2008
On Sat, 30 Aug 2008 03:32:04 -0700 (PDT), (E-Mail Removed) wrote:

>On Aug 30, 6:01*am, MN <(E-Mail Removed)> wrote:
>> 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,


A variable of type char* cannot represent a string. It can however
point to a char which is a character in a string (usually the first
character).

>to define an array of strings one would usually:
>char *arr[] = { "one", "two", "three" };


While this code is correct, arr does not have type char**. It has
type array of three pointers to char which is expressed syntactically
as char *[3].

--
Remove del for email
 
Reply With Quote
 
Barry Schwarz
Guest
Posts: n/a
 
      08-31-2008
On Sat, 30 Aug 2008 10:55:21 +0000, Richard Heathfield
<(E-Mail Removed)> wrote:

>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?


--
Remove del for email
 
Reply With Quote
 
Barry Schwarz
Guest
Posts: n/a
 
      08-31-2008
On Sat, 30 Aug 2008 05:07:54 -0700 (PDT), MN
<(E-Mail Removed)> wrote:

>On Aug 30, 2:55 pm, Richard Heathfield <(E-Mail Removed)> wrote:


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_columns+j]. In this case, your function would
return a char* which would point to element [0][0].

--
Remove del for email
 
Reply With Quote
 
MN
Guest
Posts: n/a
 
      08-31-2008
On Aug 31, 5:19 am, Barry Schwarz <(E-Mail Removed)> wrote:
> 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

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      08-31-2008
Barry Schwarz <(E-Mail Removed)> writes:
> On Sat, 30 Aug 2008 10:55:21 +0000, Richard Heathfield
> <(E-Mail Removed)> wrote:
>>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_Keith) (E-Mail Removed) <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"
 
Reply With Quote
 
Harald van Dijk
Guest
Posts: n/a
 
      08-31-2008
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.
 
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




Advertisments