목차
1. 배열함수 - 각 배열의 합 구하는 함수
♣결과
>>10
♧코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 4
int get_array_sum(int values[], int);
int main()
{
int data[] = { 1,2,3,4 };
get_array_sum(data, SIZE);
return 0;
}
int get_array_sum(int values[], int size)
{
int sum = 0;
for (int i = 0; i < size; i++) {
sum += values[i];
}
printf("%d", sum);
return 0;
}
//olivia_codingschool
2. 1번의 배열의 합을 포인터를 이용하여 계산하기
♣결과
>>20
♧코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 4
int get_array_sum(int*p, int size);
int main()
{
int data[] = { 1,2,3,4 };
int* p;
p = data; // &data[0]
get_array_sum(p, SIZE);
return 0;
}
int get_array_sum(int *p, int size)
{
int sum = 0;
for (int i = 0; i < size; i++) {
sum += *(p + i);
}
printf("%d", sum);
return 0;
}
//olivia_codingschool
<주의할 점!!!>
아래의 결과는 10이 나온다.
간접참조연산자를 어디에 찍느냐가 포인터를 이해하는 첫걸음인데,
아래와 같이 p=*data를 해버리면, p자체의 값이 data[0]의 값이 되어버리기 때문에
get_array_sum함수에서 data[0]값에 +1을 더하는 연산을 진행하기 때문에
sum값이 제대로 나오지 않는다.
결론적으로, p=data 즉, p=&data[0] 위치 자체를 저장해야하고,
get_array_sum에서 파라미터로 간접참조연산자 *를 붙여서,
합계 연산을 수행할 때 포인터값 자체를 계속 더해나갈 수 있도록 해야한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 4
int get_array_sum(int*p, int size);
int main()
{
int data[] = { 1,3,5,7 };
int* p;
p = *data; //&data[0] 의 값
get_array_sum(p, SIZE);
return 0;
}
int get_array_sum(int p, int size)
{
int sum = 0;
for (int i = 0; i < size; i++) {
sum += (p + i);
}
printf("%d", sum);
return 0;
}
3. 포인터 변수와 관련 연산자
♣결과
아래의 코드에 상세설명됨.
♧코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num=10; //num 변수의 값은 10이다.
int* p1; // p1은 포인터이다. 뭔가를 가리킬 것이다.
p1 = # //p1은 num이 저장되어 있는 메모리의 주소의 값(&)을 저장하는 포인터변수이다.
//정확히 이 값이 무엇인지는 모른다. 컴파일러가 아무대나 저장하기 때문이다.
printf("%d\n", *p1); //p1이 가리키는 값을 출력한다. -->10
printf("%d\n", p1); //???????? -->--2028602732
printf("%p\n", p1); //변수의 주소를 출력하는 형식 지정자는 %p이다. p1의 주소를 변환한다.--->000000A78715FA94
printf("%p\n", &num); //p1은 num의 주소를 가리키고 있다. 결국 p1의 주소값과 값은 똑같다. ---->000000A78715FA94
return 0;
}
//olivia_codingschool
4. 배열과 포인터
♣결과
아래 코드 참고
♧코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i;
int A[] = { 1,2,3,4,5 };
int* p;
p = A; //p=&A[0];
printf("%d\n", *p); //1
printf("%d\n", *&A[0]); //1
printf("%p\n", p); //0000002C166FF9E8
printf("%p\n", &A[0]); //0000002C166FF9E8
printf("%d\n", *(p + 1)); //2
printf("%d\n", A[0+1]); //2
}
//olivia_codingschool
5. 배열 역순으로 요소 출력하기(포인터 사용)
♣결과
>> 9 7 5 3 1
♧코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5
int get_array_sum(int*p, int size);
int main()
{
int data[] = { 1,3,5,7,9 };
int* p;
p = data; //&data[0] 의 값
get_array_sum(p, SIZE);
return 0;
}
int get_array_sum(int *p, int size)
{
for (int i = 0; i < size; i++) {
printf("%d ",*(p+size-1-i));
}
return 0;
}
//olivia_codingschool
'C언어 > 참고서: C언어 콘서트' 카테고리의 다른 글
C언어 50차시 문자열, string, 초기화, getchar(), _getch(), putchar(), _putch(), %s (0) | 2023.04.07 |
---|---|
C언어 49차시 포인터 연습문제2 (0) | 2023.04.07 |
C언어 47차시 배열과 포인터, cpu, hdd, ssd, memory (0) | 2023.04.06 |
C언어 46차시 포인터 연산, call by value, call by reference (0) | 2023.04.05 |
C언어 45차시 포인터, 메모리, 변수, 포인터 연산자 &, *, %p, 간접참조연산자 (0) | 2023.04.05 |