일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- mutate()
- 대칭형 알고리즘
- select()
- summarize()
- proc contents
- groupe_by()
- samp;e_frac()
- distinct()
- filter()
- arrange()
- dplyr
- sample_n()
- AES
- Today
- Total
Gae Ko's Blog
[C] 포인터 본문
>> c언어 수업 듣고 알게된 점 정리
포인터
JAVA에서는 포인터를 숨겼다. (c보다 고등언어)
객체생성시에 new연산자와 생성자를 이용해 메모리를 할당하면 컴퓨터내부에서 참조값(≠주소값)을 객체변수에 던져준다.
C에서는 객체라는 것이 없으니 변수 선언하는 동시에 메모리를 할당되며 주소값을 받게 된다.
각 변수를 통해 주소값에 접근하는 방법은 &(엠퍼센드) 연산자를 사용하면 됨.
&연산자 : 피연산자의 주소값을 반환
main()밖에서 main()내 변수값을 접근하고자 한다. → 포인터 사용
포인터 변수 : 변수의 주소값을 담는 변수로 선언시 *를 사용 // 포인터변수는 주소값만 가리킨다.
ex. int* numpt; 또는 int *numpt; 상관없다. 컴파일이 인식하길 공백은 무시하기 때문.
포인터변수를 사용해서 그 저장된 주소값의 값을 접근하고자 하려면 역참조연산자(*)를 사용
1 2 3 4 5 | int num = 10; int* numpt; // 포인터변수 선언 numpt = # // 이제 numpt는 num의 주소값을 가리킴 *numpt = 20; // num = 20 과 매우 정확히 동일 | cs |
예시)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include<stdio.h> typedef struct{ int _age; char name[10]; }Student; int fun(int* numpt); void main(){ Student student; Student* st = &student; // 포인터변수 int num = 10; fun(&num); // &은 주소값을 반환 student._age = 23; st->_age = 25; // (*st)._age = 25; 동일 printf("age:%d\n", student._age); printf("num:%d\n", num); } int fun(int* numpt){ // 매개변수가 포인터변수 *numpt = 100; // 포인터변수로 값에 접근 return *numpt; } | cs |
※ C에서의 배열 구조
배열은 선언되면 메모리 안의 연속된 공간에 그 크기만큼 존재하게 된다.
그리고 배열이름은 배열의 주소값을 저장하게 된다.
int a[5] ; // a == &(a[0])
배열변수 a 라면 *(a+i) == a[i] 즉, &a[i] == a+i
이러한 특징은 C에서만 가능.
함수의 매개변수로 배열을 받을 경우, fun(int num[])를 fun(int* num)라고 해도 같은 의미임.
참고로 String 은 char형 배열 형태이다. 그리고 맨 마지막 공간은 \n으로 채워져있어야하고 채워져 있다.
이유는 컴파일러가 \n를 보고 배열의 끝임을 알아채기 때문이다.
// 문자열 복사 예제 p73
'프로그래밍언어 > C' 카테고리의 다른 글
[C] 구조체 (0) | 2018.03.18 |
---|---|
[C] enum 그리고 enum&typedef (0) | 2018.03.10 |
[C] 표준입력함수 scanf() (0) | 2018.03.10 |
[C] double형 변수에 대한 절대값 구하기 : fasb() (0) | 2018.03.09 |
[C] Main 함수의 매개변수 (argc, argv) (1) | 2018.01.16 |