TIL 소프트웨어 베이직 8-9강

YU YU·2021년 8월 26일
0

8강 배열

8-1 배열을 사용하는 이유

동일한 자료형을 여러개 담기 위해서

8-2 사용법

자료형 배열명[배열의 크기]={초기화 값};

#include <stdio.h>
int main(void){
	int arr[3]={1,2,3};
    system("pause");
    return 0;
}

8-2-1 배열의 원소의 최대값 찾기

#include <stdio.h>
#includde <limits.h>

int main(void){
	int a[10]={6,5,4,3,2,1,7,8,9,10};
    int i, maxValue = INT_MIN;
    for(i = 0; i<10; i++){
    	if(maxValue <a[i]) maxValue =a[i];
    }
    printf("%d\n",maxValue);
    system("pause");
    return 0;
}

<limits.h>는 한계값에 대한 정보를 갖고 있다.
INT_MIN은 약 -20억에 가까운 숫자로(int형으로 나타낼 수 있는 가장 낮은 숫자) limits.h에 정의되어 있다.
최댓값을 구하기 위해 자주 사용되는 기능이다.

8-3 문자열과 배열

C언어는 기본적으로 자체적인 문자열 자료형을 제공하지 않는다.
따라서 문자를 여러개 묶어 놓는 형태로 문자열을 표현한다.
C++에서는 이러한 불편함을 ㅇ라고 있기에 자체적으로 strin g자료형을 제공한다.

C천어에서 하나의 문자는 1byte만 담는다. 그래서 문자의 배열을 사용한다. 즉, 문자열은 배열이다.

char a[20] = "hello world"

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
  char a[20];
  scanf("%s", &a);
  printf("%s\n",a);
  system("pause");
  return 0;
}

C언어는 특정 인덱스의 문자에 바로 접근해서 처리할 수 있다!

#include <stdio.h>

int main(void){
  char a[20] = "hello world!";
  a[4] = ',';
  printf("%s\n",a);
  system("pause");
  retun 0;
}

문자열에 포함된 특정 문자 갯수 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
	char a[]="hello world";
    int count = 0;
    for (int i = 0; i<=10;i++){
    	if(a[i] =='1') count++;
    }
    printf("%d\n",count);
    system('pause");
    return 0;
}

9강 🙉포인터🙉


9-1 포인터의 개념

포인터는 자신의 자료형에 맞는 값을 저장
포인터는 메모리 주소를 저장한다.
어떤 자료형의 주소값인지 저장한다.

그래서 int b = &a;라고 선언하면
b = 0xAFB03954가 아니라 *b = 5가 된다.

9-2 포인터 관련 연산자

  • 주소 연산자(&) : 변수 앞에 붙어 메모리 시작 주소 값을 구한다.
  • 포인터 : 포인터 변수를 선언할 때 사용한다.
  • 간접 참조 연산자(*) : 선언된 포인터 변수가 가리키는 변수를 구한다.

    여기서 궁금해서 b를 출력해보았다.


    그리고 &a를 출력해보았다.

배열에서의 포인터

#include <stdio.h>
 
int main(void) {
	int a []={1,2,3,4,5,6,7,8,9,10}
	int i;
	for (i=0;i<10; i++){
		printf("%d\n",&a[i]);	
	}
	return 0;
}


각각 4byte씩 늘어나는 것을 알 수 있다. 그 이유는 int가 4byte이기 때문이다.

포인터의 포인터(다중포인터)

#include <stdio.h>

int main(void) {
	int a = 10;
	int *b = &a;
	int **c=&b;
	printf("%d\n",**c);
	return 0;
}

배열과 포인터의 관계

배열과 포인터는 내부적으로 같다.
배열을 선언한 이후에는 그 이름 자체가 포인터 변수와 동일하다(?)
배열의 이름 자체가 주솟값을 사용하고 있다.

#include <stdio.h>
 
int main(void){
	int a[]={1,2,3,4,5,6,7,8,9,10};
    int *b = a;
    printf("%d\n",a[2]);
    printf("%d\n",b[2]);
    printf("%d\n",&a);
    printf("%d\n",b);
    printf("%d\n",&a[0]);
    system("pause");
    return 0;
}

결과는 다음과 같이 출력이 된다.

이로써

a의 주소값(&a) = b의 값(b) = a[0]의 주솟값(&a[0]). 즉,
&a = b = &a[0]
임을 알 수 있다.

포인터는 특정한 메모리 주소에 바로 접근할 수 있으므로 조심스럽게 접근해야 한다.

profile
코딩 재밌어요!

0개의 댓글

관련 채용 정보