Programming/C_C++ 10

char*, char[] 차이

상수 사용의 의미 특정 값을 변경시키지 않기 위함 변수 사용의 의미 특정 값을 변경시키기 위함 상수 사용하는 이유 상수를 사용함으로써 프로그램에서 런타임 도중 변경해야할 데이터와 그렇지 않은 데이터를 구분할 수 있다. 이를 구분함으로써 프로그램 개발이 명확해진다. 만약 엄청 많은 문자열 변수로만 모든 문자열을 정의한다면 문자열 관련해서 에러가 발생했을 때 디버깅에 많은 시간을 들여야한다. 하지만 이 때 상수를 사용해주면 이에 대한 문제를 예방할 수 있다. 그래서 C에서는 문자열 상수와 변수의 기능을 모두 제공해준다. 이 때 문자열 상수는 DATA 영역에 저장되는데, 이는 포인터형식으로 정의되어있어서 char*로 접근한다. 변수는 char t[]와 같이 배열로 선언한다. ex) char* ptr = "na..

Programming/C_C++ 2016.11.14

포인터와 배열의 관게

날 괴롭힌 난제들 중 하나인데.. 구글링 결과 대충(정말로 대충) 결과를 얻긴 얻었다. int *ptr[2]; int (*ptr)[2]; int *ptr[2]는 직역한 대로 '포인터 변수를 배열로 가진다'이고, int (*ptr)[2]는 'int xx[2]라는 배열 자체를 포인터하는 변수이다'라고 할 수 있다. 이 점 유의하고 시작하자. int n[2]; int (*ptr)[2]; p = n; //에러 p = &n[0]; //에러 p = &n; //정상 n, &n[0], &n은 모두 같은 값을 가지게 된다. 하지만 값이 같다고 무작정 쳐넣으면 안된다. 자료형이 다르기 때문이다. 정리하자면 n[0] 은 int &n[0] 은 int* n 은 int[] &n 은 int(*) [] 여기까지는 괜찮은데 그 다음부..

Programming/C_C++ 2012.02.23

상속

그니까 표현하자면 class Mammal { 쏼라 }; class Dog : public Mammal { 솰라 }; 개는 포유류에 속한다. 고로 포유류의 특징을 지니고 있기에 Mammal의 멤버함수, 변수를 사용해도 문제없다. 그래서 이런 경우 상속. ex> class Mammal { public: func1() {} }; class Dog : public Mammal { public: func1(int x) { 쏼라; } }; 이 때 func1()이 뒤의 Dog에서 오버라이딩 됐으므로 void main() { Dog a; a.func1(2); } Dog의 오버라이딩된 함수를 쓸려면 이렇게 써야함. 원형인 기본메서드를 쓸려면 a.Mammal::func1(); 이렇게 쓰면 됨

Programming/C_C++ 2011.10.10

C++에서의 파일 입출력 **

fstream 사용 ifstream fin(filename) 파일을 열기 위해 써먹는다. ofstream fout(foutname) 파일을 출력하기 위해 써먹는다. fin.get(ch) : 배열의 문자들을 하나씩 읽어들인다. 단, 이 때 값은 문자형으로 읽는다. C에서는 fgetc(fin)으로 읽어들인다. 단, 이 때 값은 정수형으로 읽는다. { 파일의 끝에 다달았을 때 이를 구분하기 위해 EOF 라는 특별한 값을 사용한다. EOF 값은 문자가 나타내는 범위를 벗어난 값이어야지만 정상적인 입력 문자와 구분할 수 있다. 그래서 char 대신 int 형으로 값을 받는 것이다. ch = fgetc(fin); while(ch != EOF) { printf("%c", ch); ch = fgetc(fin); } 이..

Programming/C_C++ 2011.08.18

전처리기

#define 1. 상수로 치환 2. 매크로의 역할 ex) #define PLUS(x) ((x) = (x) + (x)) #if if와 같은 역할 ex> #define A 1 #if A //source #else //source2 #endif A가 1로 치환되었기에 #if의 조건검사식에서 참이되어서 source가 컴파일된다. 이 때 source2는 컴파일 되지 않는다. A를 0으로 해주면 source는 컴파일 되지 않는다. 이 때 source2는 컴파일 된다. #ifdef #ifndef #ifdef : 어떠한 값이 define되어 있는지 여부 확인 ex> #define A 1 #ifdef A //source #endif A가 define되어있기 때문에 source는 컴파일된다. 반대로 #ifndef : 어..

Programming/C_C++ 2011.08.17

객체 초기화

보통 생성자 안에서 객체의 멤버변수를 초기화. but 생성자는 - 초기화단계 - 몸체 두 곳에서 호출. 대부분의 변수 -> 양쪽 어느 곳에서나 설정가능. 초기화 단계에서 초기화가 깔끔. cat::cat () : itsAge (5), itsWeight (8) { } 요렇게 구현. class cat { public: cat (int age, int weight); ~cat () {} int GetAge () { return itsAge; } int GetWeight () { return itsWeight; } private: int itsAge; int itsWeight; }; cat::cat (int age, int weight) : itsAge (age), itsWeight (weight) {} 이런식으..

Programming/C_C++ 2011.07.17

reference (참조자)

참조자(reference) target에 대한 또다른 이름을 행사. target의 형을 쓰고 참조연산자(&) 다음에 참조자의 이름을 씀으로써 참조자를 만든다. ex) int &rSomeRef = someInt; rSomeRef는 someInt를 참조하도록 초기화된 정수형 참조자. 참조 연산자(&)는 주소 연산자(&)와 같은 기호이지만 같은 연산자가 아니다. 하지만 둘은 상당히 관련이 있다. 참조자의 주소 = target의 주소 ->가리키고 있는 것에 대한 또다른 이름이기 때문이다. C++에서는 참조자 그 자체의 주소에 접근하는 방법을 제시하지 않는다. -> 이는 의미가 없기 때문 -> 참조자는 target에 대한 동의어로 여겨지기 때문 class에서도 참조자 사용가능 person이라는 class가 있다 ..

Programming/C_C++ 2011.07.14
반응형