동일한 자료형을 여러개 담기 위해서
자료형 배열명[배열의 크기]={초기화 값};
#include <stdio.h>
int main(void){
int arr[3]={1,2,3};
system("pause");
return 0;
}
#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에 정의되어 있다.
최댓값을 구하기 위해 자주 사용되는 기능이다.
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;
}
포인터는 자신의 자료형에 맞는 값을 저장
포인터는 메모리 주소를 저장한다.
어떤 자료형의 주소값인지 저장한다.
그래서 int b = &a;라고 선언하면
b = 0xAFB03954가 아니라 *b = 5가 된다.
#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]
임을 알 수 있다.
포인터는 특정한 메모리 주소에 바로 접근할 수 있으므로 조심스럽게 접근해야 한다.