&
앰퍼샌드 ampersand 연산자 & - x 가 변수 이면 &x 는 x 의 주소를 가리키는 포인터 pointer 이다.
*
포인터 선언 또는 포인터가 가리키는 변수의 값.
[ ]
// 배열 선언
int anArray [];
예제
int *p; // int 자료형에 대한 포인터 선언
int i = 5; // int 변수에 5 를 할당
int result = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Test begin");
p = &i; // 'p' 'i' 의 주소를 가짐. 즉, p 는 i 의 주소를 가리키는 포인터
result = *p; // *p 는 주소의 값을 가짐. 즉, *p 는 i 의 값
Serial.print("i = ");
Serial.println(i);
//Serial.print("p = ");
//Serial.println(p); // -> 에러: no matching function for call to 'println(int*&)'
Serial.print("result = ");
Serial.println(result);
}
void loop() {
// put your main code here, to run repeatedly:
}
출력
Test begin
i = 5
result = 5
함수를 통한 배열 변수 전달
/* 참고: https://www.tutorialspoint.com/arduino/arduino_passing_arrays_to_functions.htm
* 그대로 하면 동작 안함.
* 일부 변형해서 성공함.
*/
// 원래 modifyArray( int [], int ) -> 되고,
// 변형 modifyArray( int *[], int ) -> 되고,
// 변형 modifyArray( int &[], int ) -> 안된다.
// 변형 modifyArray( int a[], int sizeOfArray ) -> 변수명을 넣어도 된다.
// 변형 modifyArray( int *a[], int sizeOfArray ) -> 변수명을 넣어도 된다.
void modifyArray( int *a[], int sizeOfArray );
// void modifyArray( int a[], int sizeOfArray );
// 원래는 modifyElement( int ); -> 안되고
// 변형하여 modifyElement( int & ); -> 된다.
// 변형하여 modifyElement( int * ); -> 된다.
// 변형하여 modifyElement( int &e ); -> 변수명을 넣어도 된다.
void modifyElement( int &e );
// 내가 새로 만들어 본 함수
void modifyDifferentTypeVariables( unsigned long &, unsigned long &, long & );
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Test passing an array by reference ");
const int arraySize = 5;
int a[ arraySize ] = {0, 1, 2, 3, 4};
Serial.println("Oriinal array ");
for (int i = 0; i < arraySize; ++i) {
Serial.println(a[i]);
}
modifyArray(a, 5);
Serial.println("modified array ");
for (int j = 0; j < arraySize; ++j) {
Serial.println(a[j]);
}
Serial.println("original element ");
Serial.println(a[4]);
modifyElement(a[4]);
Serial.println("modified element ");
Serial.println(a[4]);
// 내가 넣은 스크립트
unsigned long D = 10;
unsigned long E = 10;
long F = 10;
Serial.println("before ");
Serial.println(D);
Serial.println(E);
Serial.println(F);
modifyDifferentTypeVariables(D, E, F);
Serial.println("after ");
Serial.println(D);
Serial.println(E);
Serial.println(F);
}
void loop() {
// put your main code here, to run repeatedly:
}
void modifyArray( int a[], int sizeOfArray ) {
for (int k = 0; k < sizeOfArray; ++k) {
a[k] *= 2;
}
}
// 원래는 modifyElement( int e ) {..} -> 원소 변경안되고 그대로 출력
// 변형해서 modifyElement( int *e ) {..} -> 안된다. 처음 선언떄는 *e 도 된다. 함수 정의에서 안된다.
// 변형해서 modifyElement( int &e ) {..} -> 원소 변경되어 제대로 출력
void modifyElement( int &e ) {
e *= 100;
}
// 내가 새로 만들어 본 함수
void modifyDifferentTypeVariables( unsigned long &A, unsigned long &B, long &C) {
A += 1;
B *= 2;
C *= 10;
}
반응형
'Arduino' 카테고리의 다른 글
3개 LED를 독립적으로 켜고 끄기 (0) | 2021.11.05 |
---|---|
스텝모터 돌아가게 하기 - 주입펌프 만들기 (0) | 2021.11.01 |
아두이노로 릴레이 동작시키기 (0) | 2021.10.28 |
아두이노 'pinMode(switchPin, INPUT_PULLUP);' (0) | 2021.10.19 |
댓글