|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
I need you to confirm if what I am thinking is correct:
myVar = 1; Establish the "shell" as being = 1 array[1] = &myVar; Let the 1st value of array[] = the address of the "shell" (*)(array[1]) = 2; the * means modify/check the contents of the address of myVar printf(*myVar); since the shell wasn't updated, the * is needed to display the contents of the address of myVar since printf(myVar) would return 1 Last edited by amateurrobotguy : 13-12-2007 at 00:36. |
|
#2
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
Quote:
Code:
(*)(array[1]) = 2; Code:
printf("%d\n",myVar);
|
|
#3
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
int *ptr;
int a, b; a = 10; ptr = &a; b = *ptr; Why bother with the int *ptr declaration when it has to be used again in the b= part? Is this just proper etiquette and not really needed? Is this alright for my declaration: int joystickbuttons[8] = {&p1_sw_trig, &p1_sw_top, &pl_sw_aux1, &p1_sw_aux2, &p2_sw_trig, &p2_sw_top, &p2_sw_aux1, &p2_sw_aux2}; And this for my looped search: if ((*)joystickbuttons[arrayindexer[1]] == 1) arrayindexer is just a simple array I am using for a counter. If all this looks good then it means I finally figured this whole pointer thingie out largely thanks to this forum and Wiki. Last edited by amateurrobotguy : 13-12-2007 at 01:50. |
|
#4
|
|||
|
|||
|
Re: How to manipulate a variable value using an array?
Quote:
Code:
int *ptr; //ptr is a pointer to the address an 'int' somewhere in memory int a, b; //compiler chooses where these go in memory, each have an address a = 10; //set value of a to 10 //pass a by reference to ptr ptr = &a; //ptr now holds the address of where a is in memory b = *ptr; //b now holds the value (use *) that ptr points to The first line declares a pointer, which is different from a regular variable. You can do other cool things with this, too. Code:
void idouble(int * input){
*input *= 2 ;
}
void main(){
int x ;
x = 5 ;
idouble(&x) ;
print(x);
}
Last edited by Tom Bottiglieri : 13-12-2007 at 01:58. |
|
#5
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
So i have to say that my array of buttons is going to be holding addresses by declaring it like this:
Code:
int (*)joystickbuttons[8] = {&p1_sw_trig, &p1_sw_top, &pl_sw_aux1, &p1_sw_aux2, &p2_sw_trig, &p2_sw_top, &p2_sw_aux1, &p2_sw_aux2};
And the 2nd half of the above code: Code:
if ((*)joystickbuttons[arrayindexer[1]] == 1) I don't get some of your example: Code:
void idouble(int * input){ Input the address and convert it to the data "input"
*input += input ; I don't get the use of *input
}
void main(){
int x ;
x = 5 ;
idouble(&x) ; Call the above function giving it an address as a parameter
print(x); I don't get how the idouble() returns x
}
Last edited by amateurrobotguy : 13-12-2007 at 02:11. |
|
#6
|
|||
|
|||
|
Re: How to manipulate a variable value using an array?
Quote:
|
|
#7
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
Oh you sly bastard
You are basically bypassing the whole naming system of variables with input and directly puting data to addresses. I like this The int *input is just the declaration of input and not the actual conversion of &x to data....that was the confusing part. I can see why google refers to pointers as "advanced c".Can you check the code i posted above the above post to tell me if that will work fine? Last edited by amateurrobotguy : 13-12-2007 at 02:29. |
|
#8
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
This code isn't working:
int *joystickbuttons[8] = {&p1_sw_trig, &p1_sw_top, &pl_sw_aux1, &p1_sw_aux2, &p2_sw_trig, &p2_sw_top, &p2_sw_aux1, &p2_sw_aux2}; it errors me saying I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1105] symbol 'pl_sw_aux1' has not been defined I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1101] lvalue required I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1218] extraneous initializer values |
|
#9
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
Well I see you have a pl instead of a p1
|
|
#10
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
I fixed that but it still says
I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield |
|
#11
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
not a 100% but I think it may have something to do with the fact that the p1, p2 etc switches are defined to structures. They're defined in the C preprocessor but they were never declared as variables anywhere else(atleast not anywhere I could find)
I'm thinking that you can't do this with those variables... Last edited by kevin.li.rit : 13-12-2007 at 21:08. |
|
#12
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
The problem is what MPLAB says it is, you cannot reference (aka have a pointer to) a bitfield, relay outputs and, I assume, joystick switch states are stored in bitfields.
|
|
#13
|
|||
|
|||
|
Re: How to manipulate a variable value using an array?
Each of these names refers to a single bit, not a byte. Because each symbol is referring to a bit and not a byte, an address is insufficient to identify the symbol. The wikipedia article http://en.wikipedia.org/wiki/Bitfield explains the concept very well.
Quote:
~Phil |
|
#14
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
So much for elegant coding...
But i think lukevanoort's workaround will work, just as long as I put it all in a separate function. My goal with this was just to clean up a billion if-thens into a for loop but i guess a if-then function will make the code easier to read anyways. Last edited by amateurrobotguy : 14-12-2007 at 00:23. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| turning inputs into outputs | Huron Warriors | Programming | 4 | 19-04-2007 22:10 |
| How do the Analog Inputs work? | JBotAlan | Electrical | 3 | 07-01-2005 00:11 |
| How to put Inventor pics on the web | Andrew Schuetze | Inventor | 7 | 05-01-2005 13:59 |
| How much time do you put into building your robot | Wayne Doenges | General Forum | 16 | 29-01-2002 19:30 |
| put effort into thread subject | Brandon Martus | General Forum | 12 | 28-01-2002 19:12 |