We're a community of 1077K IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,076,171 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

is char** val the same as char* val[ ]

is char** val the same as char* val[ ] when is the formal ( char** val) used

2
Contributors
4
Replies
23 Hours
Discussion Span
3 Months Ago
Last Updated
6
Views
Question
Answered
otengkwaku
Junior Poster in Training
93 posts since Mar 2012
Reputation Points: 23
Solved Threads: 1
Skill Endorsements: 8

is char** val the same as char* val[ ]

Only as formal parameters in a function definition. Otherwise, they're not. I'm assuming we're talking about parameters for the answer to your next question.

when is the formal (char** val) used

I'll use the array notation when I'm absolutely sure that the function is intended to work with an array or simulated array. I prefer to use pointer notation when the object is known to not be an array or whether it's an array is unknown.

deceptikon
Challenge Accepted
Administrator
3,452 posts since Jan 2012
Reputation Points: 822
Solved Threads: 473
Skill Endorsements: 57

so if i get you, they are all array notation but char** val is implicite and
char* val[] is explicite
because i just noticed that using int main (int argv, char** argc) worked the same way as int main (int argv, char* argc[])

otengkwaku
Junior Poster in Training
93 posts since Mar 2012
Reputation Points: 23
Solved Threads: 1
Skill Endorsements: 8

they are all array notation but char** val is implicite and char* val[] is explicite

It's the other way around. They are all pointers, and the [] option is syntactic sugar to highlight the intention that the parameter is an array. But also note that this equivalence only applies to the first dimension of a the array notation. All subsequent dimensions require a size and represent array types. Consider this:

int main()
{
    int a[2][4];

    foo(a);
}

foo() must be declared in one of two ways:

void foo(int a[][4]);  /* First dimension decays into a pointer */
void foo(int (*a)[4]); /* Explicitly stating the first dimension as a pointer */

It's a common misconception that the double pointer type corresponds to a 2D array, which is false:

void foo(int **a); /* Fails to compile */
deceptikon
Challenge Accepted
Administrator
3,452 posts since Jan 2012
Reputation Points: 822
Solved Threads: 473
Skill Endorsements: 57

ok ok ok thanks a lot
question solved

otengkwaku
Junior Poster in Training
93 posts since Mar 2012
Reputation Points: 23
Solved Threads: 1
Skill Endorsements: 8
Question Answered as of 3 Months Ago by deceptikon

This question has already been solved: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
View similar articles that have also been tagged:
 
© 2013 DaniWeb® LLC
Page rendered in 0.0741 seconds using 2.78MB