PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.c > What is the proper Syntax for this Pointer?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
What is the proper Syntax for this Pointer?

Réponse
 
LinkBack Outils de la discussion
Vieux 29/11/2007, 08h42   #1
Neil
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut What is the proper Syntax for this Pointer?

What I am doing wrong

This works

batPointer = adaptors[position].adaptor[channel]->batData;
adaptors[position].batteries[channel] = batPointer->battery;

where:
batData is a pointer to a struct
batPointer is a pointer to a different kind of struct

I want one line, but I get compiler errors, what is the correct syntax?
  Réponse avec citation
Vieux 29/11/2007, 08h51   #2
santosh
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil wrote:

> What I am doing wrong
>
> This works
>
> batPointer = adaptors[position].adaptor[channel]->batData;
> adaptors[position].batteries[channel] = batPointer->battery;
>
> where:
> batData is a pointer to a struct
> batPointer is a pointer to a different kind of struct
>
> I want one line, but I get compiler errors, what is the correct
> syntax?


Please post a complete, minimal program that exhibits the concerned
error. Without precise definitions
of 'batPointer', 'adaptors', 'position', 'channel', 'batData',
and 'battery', we cannot say what the problem could be.

  Réponse avec citation
Vieux 29/11/2007, 09h21   #3
Tomás Ó hÉilidhe
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil:


> batPointer = adaptors[position].adaptor[channel]->batData;
> adaptors[position].batteries[channel] = batPointer->battery;
>
> I want one line, but I get compiler errors, what is the correct syntax?



When faced with this situation, there's a pretty simple routine:

Take your mouse, go to the first line and highlight what gets assigned to
batPointer, hit Ctrl+C.

Go to the second line, put parentheses around batPointer, highlight
batPointer, and hit Ctrl+V.

The parentheses are needed in order to ensure that operator precedence
doesn't get messed up. In your example though, there's no need for the
parentheses.

adaptors[position].batteries[channel] = adaptors[position].adaptor
[channel]->batData->battery;

--
Tomás Ó hÉilidhe
  Réponse avec citation
Vieux 29/11/2007, 10h24   #4
Chris Dollin
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil wrote:

> What I am doing wrong
>
> This works
>
> batPointer = adaptors[position].adaptor[channel]->batData;
> adaptors[position].batteries[channel] = batPointer->battery;
>
> where:
> batData is a pointer to a struct
> batPointer is a pointer to a different kind of struct
>
> I want one line, but I get compiler errors, what is the correct syntax?


What was your one line, what were the declarations of the variables, and
what were the compiler errors?

[I'd also be likely to introduce a name for `adaptors[position]`, since it's
duplicated. And without seeing the rest of your code, I can't tell if your
assignment above should obviously be extracted into a well-named function
of its own.]

--
Chris "in some contexts, context is everything" Dollin

Hewlett-Packard Limited registered office: Cain Road, Bracknell,
registered no: 690597 England Berks RG12 1HN

  Réponse avec citation
Vieux 29/11/2007, 12h39   #5
James Kuyper
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil wrote:
> What I am doing wrong
>
> This works
>
> batPointer = adaptors[position].adaptor[channel]->batData;
> adaptors[position].batteries[channel] = batPointer->battery;
>
> where:
> batData is a pointer to a struct
> batPointer is a pointer to a different kind of struct


If that's the case, and this is your actual code, you should be getting
a diagnostic message; there is no implicit conversion between pointers
to different kinds of struct; you should have to use an explicit conversion.

Why are you storing a pointer to one kind of struct into a pointer to a
different kind of struct? Why do you expect to get any useful results
from doing so? There are some special circumstances where it will work,
but it's not clear to me that you know what they are, and it's not
possible for me to figure out from the information you've given us
whether this is one of those special circumstances.

> I want one line, but I get compiler errors, what is the correct syntax?


If you get compiler errors when you make this one, you should tell use
what that one line is, and what the error messages are.
  Réponse avec citation
Vieux 30/11/2007, 07h53   #6
Neil
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

James Kuyper wrote:
> Neil wrote:
>> What I am doing wrong
>>
>> This works
>>
>> batPointer = adaptors[position].adaptor[channel]->batData;
>> adaptors[position].batteries[channel] = batPointer->battery;
>> where:
>> batData is a pointer to a struct
>> batPointer is a pointer to a different kind of struct

>
> If that's the case, and this is your actual code, you should be getting
> a diagnostic message; there is no implicit conversion between pointers
> to different kinds of struct; you should have to use an explicit
> conversion.
>
> Why are you storing a pointer to one kind of struct into a pointer to a
> different kind of struct? Why do you expect to get any useful results
> from doing so? There are some special circumstances where it will work,
> but it's not clear to me that you know what they are, and it's not
> possible for me to figure out from the information you've given us
> whether this is one of those special circumstances.
>
>> I want one line, but I get compiler errors, what is the correct syntax?

>
> If you get compiler errors when you make this one, you should tell use
> what that one line is, and what the error messages are.


Yes it works. The structures are elaborate ( Not mine ) but they do
want the are supposed to. Same the adapter, and the battery from the
linked list.

The structs ( minus the uneeded stuff)are

struct adaptorBatteryData
{
struct batteryData const *battery;
};

struct adaptorData
{
struct adaptorBatteryData const *batData;
};

struct batteryData
{

};

struct adaptorBatteryData const *batPointer;


adaptors[position].batteries[channel] =
adaptors[position].adaptor[channel].batData->battery;
Gives the error "structure required on left side of . or *."

  Réponse avec citation
Vieux 30/11/2007, 07h56   #7
Neil
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Tomás Ó hÉilidhe wrote:
> Neil:
>
>
>> batPointer = adaptors[position].adaptor[channel]->batData;
>> adaptors[position].batteries[channel] = batPointer->battery;
>>
>> I want one line, but I get compiler errors, what is the correct syntax?

>
>
> When faced with this situation, there's a pretty simple routine:
>
> Take your mouse, go to the first line and highlight what gets assigned to
> batPointer, hit Ctrl+C.
>
> Go to the second line, put parentheses around batPointer, highlight
> batPointer, and hit Ctrl+V.
>
> The parentheses are needed in order to ensure that operator precedence
> doesn't get messed up. In your example though, there's no need for the
> parentheses.
>
> adaptors[position].batteries[channel] = adaptors[position].adaptor
> [channel]->batData->battery;
>

I thought that, but then though it wrong. Thanks for the answer. And
the tip.

I hated to leave the two line solution.
  Réponse avec citation
Vieux 30/11/2007, 13h06   #8
James Kuyper
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil wrote:
....
> The structs ( minus the uneeded stuff)are
>
> struct adaptorBatteryData
> {
> struct batteryData const *battery;
> };
>
> struct adaptorData
> {
> struct adaptorBatteryData const *batData;
> };
>
> struct batteryData
> {
>
> };
>
> struct adaptorBatteryData const *batPointer;
>
>
> adaptors[position].batteries[channel] =
> adaptors[position].adaptor[channel].batData->battery;
> Gives the error "structure required on left side of . or *."


What is missing from what you just gave us is the data type for
adaptors[position] and adaptors[position].adaptor[channel]. As written,
your code requires that they both be structures. The message that was
generated implies that at least one of those expressions is a pointer to
a structure. If that is the case, then the your problem is due to the
fact that you've used "." rather than "->".
  Réponse avec citation
Vieux 30/11/2007, 19h24   #9
Keith Thompson
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Neil <NeilKurzm@worldnet.att.net> writes:
> Tomás Ó hÉilidhe wrote:
>> Neil:
>>> batPointer = adaptors[position].adaptor[channel]->batData;
>>> adaptors[position].batteries[channel] = batPointer->battery;
>>>
>>> I want one line, but I get compiler errors, what is the correct syntax?

>>

[...]
>>
>> adaptors[position].batteries[channel] = adaptors[position].adaptor
>> [channel]->batData->battery;
>>

> I thought that, but then though it wrong. Thanks for the answer. And
> the tip.
>
> I hated to leave the two line solution.


Why? Is there some virtue in putting as much stuff as possible on one
line?

--
Keith Thompson (The_Other_Keith) <kst-u@mib.org>
Looking for software development work in the San Diego area.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
  Réponse avec citation
Vieux 01/12/2007, 05h15   #10
Barry Schwarz
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

On Thu, 29 Nov 2007 03:42:51 -0500, Neil <NeilKurzm@worldnet.att.net>
wrote:

>What I am doing wrong


What is your end objective? What are really trying to accomplish?
>
>This works


How can it work if you get compiler errors?

>
> batPointer = adaptors[position].adaptor[channel]->batData;
> adaptors[position].batteries[channel] = batPointer->battery;
>
>where:
>batData is a pointer to a struct
>batPointer is a pointer to a different kind of struct


If batPointer is of type struct x* and batData is of type struct y*,
they are incompatible and there is no implicit conversion between
them. The only way to assign a value of one type to an object of
incompatible type is with a cast. However, if the converted pointer
value does not have the proper alignment you have invoked undefined
behavior.

Why do you want a pointer to some object to hold the address of an
object of different type?

>
>I want one line, but I get compiler errors, what is the correct syntax?


One line of what? You have two independent assignment statements. Do
you intend to eliminate one?



Remove del for email
  Réponse avec citation
Vieux 02/12/2007, 17h19   #11
Barry Schwarz
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

On Fri, 30 Nov 2007 02:53:53 -0500, Neil <NeilKurzm@worldnet.att.net>
wrote:


snip

>Yes it works. The structures are elaborate ( Not mine ) but they do
>want the are supposed to. Same the adapter, and the battery from the
>linked list.
>
>The structs ( minus the uneeded stuff)are


Unfortunately, also minus some needed stuff.

>
>struct adaptorBatteryData
>{
> struct batteryData const *battery;
>};
>
>struct adaptorData
>{
> struct adaptorBatteryData const *batData;
>};
>
>struct batteryData
>{
>
>};
>
>struct adaptorBatteryData const *batPointer;
>
>
>adaptors[position].batteries[channel] =


You have not told us what type of struct the object adaptors is a
pointer to or an array of. The underlying structure apparently has a
member named batteries which does not match any of the three
structures you listed.

>adaptors[position].adaptor[channel].batData->battery;


It apparently also has a member named adaptor which also doesn't match
any of the three structures you listed. But adaptor appears to be an
array of or a pointer to struct adaptorData since it has a member
named batData.

batData is a pointer to struct adaptorBatteryData which does have a
member named battery. This member is a pointer to struct
batteryData.

So the first question: Is the undefined member batteries an object of
a suitable type so batteries[i] can receive a value of type pointer to
struct batteryData?

>Gives the error "structure required on left side of . or *."


C doesn't have an operator "*.". It does have two operators "*" but
neither one is applied to structures.

So the second question: What is the correct text of the error message?
Use cut and paste; don't retype.

And the third question: Which of the objects adaptors[i]. or
adaptor[i] is not a structure?


Remove del for email
  Réponse avec citation
Vieux 05/12/2007, 08h38   #12
Neil
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: What is the proper Syntax for this Pointer?

Barry Schwarz wrote:
> On Thu, 29 Nov 2007 03:42:51 -0500, Neil <NeilKurzm@worldnet.att.net>
> wrote:
>
>> What I am doing wrong

>
> What is your end objective? What are really trying to accomplish?

The pointer was use to search a linked list, If it fails I need the
first item as a place holder.
>> This works

>
> How can it work if you get compiler errors?

The two lines worked fine, When I tried to combine them I got the errors.
>
>> batPointer = adaptors[position].adaptor[channel]->batData;
>> adaptors[position].batteries[channel] = batPointer->battery;
>>
>> where:
>> batData is a pointer to a struct
>> batPointer is a pointer to a different kind of struct

>
> If batPointer is of type struct x* and batData is of type struct y*,
> they are incompatible and there is no implicit conversion between
> them. The only way to assign a value of one type to an object of
> incompatible type is with a cast. However, if the converted pointer
> value does not have the proper alignment you have invoked undefined
> behavior.

struct x* contains a pointer to a linked list of struct y* (struct x* is
also a linked list)
->a->b->c->d->NULL
| | | |
1 1 1 1
| | |
2 2 2
| |
3 3

>
> Why do you want a pointer to some object to hold the address of an
> object of different type?
>
>> I want one line, but I get compiler errors, what is the correct syntax?

>
> One line of what? You have two independent assignment statements. Do
> you intend to eliminate one?

No combine
>
>
>
> Remove del for email


The earlier suggestion worked fine. Thanks to all.
Besides learning the pointer, I learn that I need to include more in a post.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 05h13.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,22235 seconds with 20 queries