Computer Science/C&C++ 15

[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터)_더쉬운방법

전에 올린 글에서 너무 어렵게 풀었다.. 더 쉽게 풀 수 있는 방법이 있었다. arr[i]와 *(arr+i)가 동일함을 잊지말것! malloc함수가 배열을 주는 것이 아님... //두개의 1차원 배열을 포함하는 포인터 배열을 선언하고 출력 //이중포인터 이용 포인터 배열 내 mat1과 mat2 위치 바꾸어 출력 #include #include int* input(int* x, int s); void change(int** x); int main(void) { int n, m,i;//n,m : 각각의 배열 크기/i : 반복문에 쓰일 변수 printf("각각의 배열 몇개?: "); scanf("%d %d", &n, &m); //malloc이용해 배열생성 int *mat1 = (int *)malloc(size..

[C언어] 파일 입출력

스트림(Stream) 프로그램과 파일 사이에 데이터가 이동할 수 있는 다리 1바이트(byte) 단위로 저장 파일이 필요한 이유: 하드디스크에 파일 형태로 저장해야 전원 꺼져도 데이터가 보존 파일 C에서의 파일은 일려의 연속된 바이트 파일열기->파일 읽기와 쓰기->파일 닫기 fopen 함수 스트림 형성할때 호출하는 함수 #include FILE * fopen(const char * filename, const char * mode) FILE

[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터)

2개의 배열 크기 입력받기(malloc 함수를 이용해 동적할당 받아 포인터형으로 선언) 배열들의 요소들을 입력받기 배열 한번에 출력하는 함수 작성(포인터 사용) 이중포인터 이용해 출력함수가 2개의 배열 순서 바꿔서 출력하도록 #include #include void input(int* pmat, int size); void output(int* pmat1, int* pmat2, int size1, int size2); void change(int** pmat1, int** pmat2,int* p1, int*p2); int main(void) { int n1, n2; printf("각각의 배열 몇개:"); scanf("%d %d",&n1,&n2); int* mat1=(int* )malloc(sizeof(i..

[C언어] 구조체 (Structure)

구조체 데이터를 하나로 모으기 위함 지금까진 개별 변수로 나타냈음. struct student{ int number; //학번 char name[10]; //이름 double grade; //학점 };//세미콜론 잊지말기!!! 함수내에서 사용할때 int main(void){ struct student s1;//구조체 변수 선언 ... } 구조체 초기화 //함수 밖에서도 초기화 가능한듯 struct student s1={24,"KIM",4.3}; //number=24, name[0]='K',name[1]='I', name[2]='M', name[3]=\0, grade=4.3 구조체 멤버의 접근 구조체 변수의 멤버에 접근할라면 dot(.)연산자 사용 Typedef 이용 typedef struct studen..

[C언어] 문자 역으로 출력, strncat/strlen활용

str1[100]에 문장을 저장 str2[100]에 입력 받은 문장 strncat/strlen 활용 #include #include int main(void) {//ex. hello int len;//문자열 길이 char str1[100]; printf("Please input the sentence : "); gets(str1);//100글자 이내의 문장을 입력받아 str배열에 저장 len=strlen(str1);//문자열 길이, 5 char str2[len+1];//strlen사용, 6 길이의 배열 \0을 포함해야하기 때문 //처음에 초기화 시킬때랑 실제 배열 사용할때가 구별되야함. 배열 사용할땐 -1 for(int i=0;i

[C언어] puts, printf / gets, scanf(scanf_s)

puts와 printf puts()는 문자열만 출력, printf()는 문자열 및 여러가지 정보를 서식화 하여 출력하는 함수. printf()가 더 다양한 곳에 사용될 수 있음. gets와 scanf_s gets(str1);은 scanf_s("%[^\n]",str1)//엔터키를 제외한 모든값을 받는다. 공백도 가능 %[a-z]는 소문자만 입력받는다는 것이다. 과 같다. gets는 오류가 나는 경우가 종종 있어서 이렇게 쓰면 오류가 나지 않았다.

[C언어] 함수 중심의 포인터 활용

Call-By-Value vs. Call-By-Reference 포인터를 이용하면 함수 내에서 외부에 있는 변수에 직접 접근이 가능 #include void CallByVal(int num) { num++; } void CallByRef(int * ptr) { (*ptr)++; } int main(void) { int val=10; CallByVal(val); printf("CallByVal: %d\n", val); CallByRef(&val); printf("CallByRef: %d\n", val); return 0; } =>CallByVal : 10 =>CallByRef : 11 =>CallByVal 값을 전달(복사) =>CallByRef 주소값을 전달(직접 접근) 자료형에 이름을 부여하는 typed..

[C언어] 메모리 공간의 동적 할당

가상메모리의 4대 영역 { 코드영역, 데이터영역, 힙영역, 스택영역 } 코드 영역: 실행할 프로그램의 코드 저장 공간 데이터영역 : 프로그램이 종료될 때까지 유지할 데이터 저장 공간 힙 영역 : 프로그래머가 원하는 형태로 쓸 수 있는 공간 스택 영역 : 잠깐 사용하고 삭제할 데이터 저장 공간 정적 메모리 할당 -프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당 -할당된 크기보다 더 큰 입력은 X -작은건 메모리 낭비 ex) int i, j; int buffer[80]; 지역변수, 전역변수 동적 메모리 할당 -실행 도중에 메모리 할당 -사용 끝나면 메모리 반납 -malloc() 계열의 라이브러리 함수를 사용 *run-time때 배열의 크기를 정하기 위해서는 배열을 힙 영역에다가 할당해야 함. -배..

[C언어] 문자열 관련

아스키코드 -128개로 구성, 따라서 7개의 비트로 표현가능 -대소문자간의 값의 차는 32(대문자가 먼저임) 문자(character)의 표현 방법 -따옴표로 묶어서 표현 -%c 사용하여 출력 컴파일러 -문자데이터를 아스키코드로 변경시킴 -%c 전달 시 아스키코드 값을 아스키코드 문자로 변환시킨다. 문자열(string) -문자열 변수 : 변경가능한 문자열을 저장할 수 있는 변수 -'A':문자 -"A":문자열 -출력할때 %s 사용 NULL 문자 -문자열의 끝을 나타낸다. (\0) -어디서 종료되는지 알 수 가 없어 표시가 필요 -NULL이 없으면 쓰레기값이 들어감 -문자(character)에는 \0값이 안들어감 그냥 1byte BUT 문자열에는 뒤에 \0dl emfdjrka (ex. 똑같이 A를 써도 문자에..