일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- phpmyadmin
- libft
- While
- 구조체
- docker
- C언어
- 패킹
- python
- 함수
- 동적할당
- iF
- C++
- vs코드 단축키
- 포인터
- Double
- float
- cout
- nginx
- jupyter 단축키
- 42
- 42서울
- list
- Class
- 2차원배열
- 자료형
- for
- else if
- 42Seoul
- 42cursus
- ft_server
- Today
- Total
목록분류 전체보기 (46)
Developer
CPU는 비트에 따라서 메모리 접근 단위가 다르다. 32비트의 컴퓨터는 32비트 단위로, 64비트의 컴퓨터는 64비트 단위로 접근한다. 대부분의 C언어 컴파일러는 CPU가 효율적으로 메모리에 접근할 수 있도록 구조체를 정렬해준다. 그럼 구조체 정렬이 무엇인지 알아보자. 구조체 정렬 #include typedef struct { //구조체 정의 char a; int b; }some; int main() { some c; //구조체 변수 선언 printf("멤버변수 a의 크기 :%d Byte\n", sizeof(c.a)); printf("멤버변수 b의 크기 :%d Byte\n", sizeof(c.b)); printf("구조체 변수 c의 크기 :%d Byte\n", sizeof(c)); return 0; ..
구조체도 다른 자료형과 같이 포인터, 배열을 사용할 수 있다. 구조체 포인터 #include #include typedef struct Student{ char name[30]; //이름 char phone_number[30]; //전화번호 int student_id; //학번 }Student; int main(){ Student s={"김모군","010-xxxx-xxxx",123456}; Student *sp; sp=&s; printf("-> 사용\n"); printf("%s\n",sp->name); printf("%s\n",sp->phone_number); printf("%d\n",sp->student_id); printf("\n역참조 사용\n"); printf("%s\n",(*sp).name); p..
구조체란 서로 다른 자료형의 여러 변수들을 하나의 묶음으로 사용할 수 있게 해준다. 기본 자료형을 조합해서 새로운 자료형을 만든다고 생각하면 된다.학생의 정보를 관리하기 위해 구조체를 사용해 보자. 정보 항목은 이름, 전화번호, 학번 3가지만 하겠다. #include #include struct Student{ char name[30]; //이름 char phone_number[30]; //전화번호 int student_id; //학번 }; int main(){ struct Student s; strcpy(s.name,"김모군"); strcpy(s.phone_number,"010-xxxx-xxxx"); s.student_id=123456; printf("%s\n",s.name); printf("%s\n"..
C에서 제공하는 문자열 함수를 알아보자 문자열 길이 길이는 sizeof를 쓰면 되지 않나? 라고 생각할 수 있지만 만약 10크기의 배열에 "abc"문자열이 들어가 있다고 생각해보자! 실제 문자열 길이는 NULL문자를 제외하고 3이다. 하지만 sizeof연산자를 사용하면 배열의 크기인 10이 나올것이다. 따라서 문자열의 길이를 구해주는 함수가 따로 존재한다. 사용 방법: strlen(문자열포인터); #include #include int main(){ char s[10]="Study"; printf("%d\n",strlen(s)); return 0; } strlen(string length)함수는 string.h 헤더파일에 선언되어 있으므로 string.h를 포함해줘야 한다. 코드1에서 알 수 있듯이 ..
문자열은 말 그대로 문자의 나열이다. 지금까지 char형 변수에 문자를 하나씩 저장하여 사용하였다. char ch='a'; 문자 a를 ch에 할당 문자열은 이러한 문자들의 나열이다. 처음 C를 시작할때 printf함수로 출력한 "Hello World!"또한 문자열이다. 문자는 작은따옴표로 감싸주고 문자열은 큰 따옴표로 감싸주는것을 기억하자! C++에서는 string이라는 문자열을 저장하는 자료형이 따로 존재하지만 아쉽게도 C에서는 문자열을 저장하는 자료형이 따로 존재하지 않는다. C에서는 문자열을 처리하기 위해 포인터와 배열을 사용한다. 물론 char 자료형을 사용하여야 한다. 문자열과 포인터 #include int main(){ char *ch="Study"; printf("%s\n",ch); ..
포인터를 사용해 원하는 시점에 원하는 만큼 메모리를 할당할 수 있는 것을 동적 할당이라고 한다. malloc를 사용해 동적 할당을 할 수 있다. malloc는 stdlib.h헤더에 선언되어 있으므로 stdlib.h를 포함 시켜줘야한다. #include #include int main() { int *ptr; ptr = (int*)malloc(sizeof(int)); if (ptr == NULL)return -1; *ptr = 32; printf("%d", *ptr); free(ptr); return 0; } 코드1을 보면 포인터만 선언되어 있다. 이러한 포인터에 malloc로 int만큼의 크기를 동적 할당해주어 사용하였다. malloc는 아래와 같이 사용할 수 있다. malloc(byte단위 크기) ma..
배열은 같은 자료형의 변수가 여러개 필요할때 변수 선언과 관리 및 처리를 쉽게 도와준다. #include int main(){ int arr[10]; //크기가 10인 int형 배열 선언 int arr1[10]={1,2,3,4,5,6,7,8,9,10}; //선언 및 초기화 arr[0]=1; //arr배열의 0번 위치에 1을 저장 arr[1]=2; arr[2]=3; printf("%d\n",arr[0]); printf("%d\n",arr[1]); printf("%d\n",arr[2]); printf("%d\n",arr1[0]); printf("%d\n",arr1[7]); printf("%d\n",arr1[9]); return 0; } 위의 코드를 보면 대략적인 사용 방법을 알 수 있을 것이다. 배열은 자료..
변수를 선언하면 컴퓨터의 메모리에 변수의 공간이 생성된다. int a=100; 을 수행했을때 동작을 보자 그림과 같이 일정 공간 변수를 위해 공간을 확보하고 값을 저장하거나 사용한다. 그럼 변수a의 주소는 무엇일까? 이미 scanf를 배울때 변수의 주소를 얻는 방법을 배웠다. 바로 &(주소 연산자)이다. #include int main(){ int a=100; printf("%p\n",&a); return 0; } 포인터용 서식 지정자 %p를 사용해 출력해보았다. 위의 실행 결과에 나오는 a의 주소이다. 이 주소는 컴퓨터마다, 실행마다 매번 다르게 정해진다. 그리고 출력된 포인터를 보면 16자리 인것을 알 수 있다. 지금 컴퓨터가 64비트 컴퓨터 이기때문이다. 32비트라면 8자리로 나올것이다. 주소를..