'language'에 해당되는 글 46건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

#include <stdio.h>

 

int main(void)

{

                  int num1=10, num2=20, num3=30;

 

                  int* arr[3]={&num1, &num2, &num3};

 


 

                  // 표현은 같은 표현

                  printf("%d \n", arr[0]);

                  printf("%d \n", *arr);

                 

                  //

                  printf("%d \n\n", arr);

                 

                  // 해당 주소들이 저장하고 있는 값을 출력

                  printf("%d \n", *arr[0]);

                  printf("%d \n", *(arr[1]));

                  printf("%d \n\n", *arr[2]);

                 

                  // 표현은 같은 표현

                  printf("%d \n", arr1[0]);

                  printf("%d \n", *arr1);

 

                  //

                  printf("%d \n\n", arr1);

                 

                  // 해당 주소들이 저장하고 있는 값을 출력, *arr1[0], 컴파일 되지만 실행 에러.

                  printf("%s \n", arr1[0]);          

                  printf("%s \n", arr1[1]);

                  printf("%s \n", arr1[2]);


 

                  // 

                  printf("%s \n", *arr1);

 


                  scanf("%d", &num1);


                  return 0;

}


#include <stdio.h>

 

int main(void)

{

                  int num1=10, num2=20, num3=30;

 

                  // 배열 이름 = 배열의  번째 요소 주소값

                  //---------------------------------------------------

                  // 포인터 (배열변수배열에 주소값을 저장

                  // arr이라는 배열 변수

 

                  // 포인터 배열.

                  int* arr[3]={&num1, &num2, &num3};


                  // 포인터 배열.

                      char a = 'A';

 

                      char* arr1[4] = {

                                                     "Fervent-lecture",

                                                     "TCP/IP",

                                                     "Socket Programming",

                                                     &a

                      };

 

                  //---------------------------------------------------

                  // 주소(arr[0]) 가리키는 값을 참조(*)

                  printf("%d \n", *arr[0]);

                  printf("%d \n", *arr[1]);

                  printf("%d \n\n", *arr[2]);

 

                  // *arr, arr[0] 동일한 표현  번째 요소 주소 

                  //---------------------------------------------------

                  printf("%d \n", *(*arr));

                  printf("%d \n", *arr);

                  printf("%d \n", &arr);

                  printf("%d \n\n", arr);

 

                  //---------------------------------------------------

                  printf("%d \n", &num1);

                  printf("%d \n", &num2);

                  printf("%d \n\n", &num3);

                 

                  printf("%d \n", arr[0]);

                  printf("%d \n", arr[1]);

                  printf("%d \n\n", arr[2]);

                  //---------------------------------------------------

 

                  //---------------------------------------------------

                  // *arr1[0], 컴파일 되지만 실행  에러.


                  // %d, %c  값을 받는 서식 문자이지만,


                  // %s  주소를 받는 서식 문자이므로,

                  // %s  값을 대입하면 에러가 발생한다.

 

                  printf("%s \n", arr1[0]);

                  printf("%s \n", arr1[1]);

                  printf("%s \n", arr1[2]);

                  printf("%s \n", *arr1);

                  //---------------------------------------------------


          // 즉, 올바른 서식 문자를 사용해야 제대로 출력된다.


          // 문자열이 아닌 문자 '값'의 경우, * 연산자를 사용해서 간접 참조한다는 것을 알려줘야 한다.


          printf("%s \n", arr1[3]);

          printf("%c \n\n", *arr1[3]);

                  //---------------------------------------------------

                  // C++의 system("pause");

                  scanf("%d", &num1);

                  return 0;

}




 





'language > C|C++' 카테고리의 다른 글

C언어 정리 2  (0) 2016.08.08
typedef  (0) 2016.08.06
FILE* fopen  (0) 2016.07.26
문자와 문자열 처리 함수  (0) 2016.07.25
데이터 상수화, 포인터 상수화  (0) 2016.07.21
블로그 이미지

saylin

,

C언어 정리 2

language/C|C++ 2016. 8. 8. 00:00
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문자열 변수의 특징과 null 문자에 대한 이해


배열을 이용한 문자열 변수의 생성


char str[6] = "Hello";


문자열 길이보다 하나 더 길게 배열을 할당하는 이유는 문자열의 끝에 null 문자가 자동으로 삽입되기 때문이다.


null 문자는 문자열의 끝을 의미하고, '\0'은 null 문자를 의미한다. 

null 문자는 아스키 코드값 0에 해당한다.


null 문자가 포함되어 있지 않은 문자열은 문자열이 아니라 단순히 문자 배열이다.


char arr1[] = {'a', 'b', 'c'};           (이는 문자 배열)

char arr2[] = {'a', 'b', 'c', '\0'};    (이는 문자열)



포인터에 대한 이해


포인터는 메모리의 주소 값을 저장하기 위한 변수.


직접 접근(Direct Access) 과 간접 접근(Indirect Access)


포인터 변수 pA 앞에 * 연산자를 붙이면 포인터가 가리키는 메모리 공간에 존재하는 값을 참조한다는 뜻.

즉, pA가 변수 a의 주소값을 가리키고 있다면 a==*pA


포인터는 가급적 선언과 동시에 초기화를 시켜주는 것이 좋다.



포인터와 배열의 관계


배열의 이름도 포인터다. 단, 배열은 포인터 변수와는 달리 주소 값을 바꿀 수 없는 상수다.

따라서 배열 이름을 '상수 포인터'라고 한다.


배열 이름은 첫 번째 요소의 주소 값을 나타낸다.



포인터 연산


포인터는 제한된 형태의 연산이 가능하다. 즉, 포인터 연산은 포인터 값을 증가 혹은 감소시키는 연산만 가능하다.


*int 타입 포인터 변수 값을 1 증가시키면(++pA 혹은 pA++) 4 증가함과 동시에 증가된 위치의 주소값이 저장된다.

*char 타입 포인터 변수 값을 1 증가시키면(위와 마찬가지로) 1이 증가함과 동시에 증가된 위치의 주소값이 저장된다.


즉, 포인터 값을 1 증가 혹은 감소시키면 데이터의 자료형 크기만큼 증가 혹은 감소하며, 변경된 위치의 주소값이 저장된다.



arr[i] == *(arr+i)


포인터 arr이 가리키는 곳에서 i칸 건너편에 있는 요소의 값을 참조하라는 의미. 이 때, arr이 가리키는 곳은 고정되어 있다.

따라서, *(arr+i)는 arr[i]와 같이 사용할 수 있다.



#include <stdio.h>

 

int main(void)

{

                  int arr[3]={11, 22, 33};


      // int * ptr=&arr[0];  같은 문장

                  int * ptr=arr;

 

                  printf("%d %d %d \n", *ptr, *(ptr+1), *(ptr+2));

      

// ptr

                  printf("%d ", *ptr);  ptr++;

                  printf("%d ", *ptr);  ptr++;


                  printf("%d ", *ptr);  ptr--;

                  printf("%d ", *ptr);  ptr--;

                  printf("%d ", *ptr);  printf("\n");           

                  return 0;

}



문자열 상수를 가리키는 포인터


char str1[5] = "abcd";

char *str2 = "ABCD";


배열 str1이 저장하고 있는 문자열은 변수가 된다.

포인터 str2는 문자열 상수 "ABCD"를 가리킨다.


문자열 상수는 메모리 공간에 저장이 되면 그 순간에 문자열 상수의 주소 값을 반환한다.

따라서, char *str2 = "ABCD";의 경우와 같이 주소 값이 아닌 문자열 상수를 전달해도 이 문장은 성립한다.


똑같은 문자열을 선언하면 (문자열 상수는) 한번만 메모리 공간에 할당된다.


char *str1 = "ABCD";

char *str2 = "ABCD";


문자열 상수 "ABCD"는 동일한 메모리 공간에 할당되고, 따라서 str1, str2는 동일한 주소 값을 가리키게 된다.

이는 컴파일러가 메모리를 효율적으로 사용하기 위해 최적화(optimization) 과정을 거치기 때문이다.



포인터 배열


포인터 배열은 메모리 주소값을 저장할 수 있는, 즉 포인터를 요소로 지니는 배열이다.


int *arr1[10];


char* arr[3] = {

"Fervent-lecture", 

"TCP/IP",

"Socket Programming"

};


문자열 상수가 메모리 공간에 할당되고, 포인터 배열 arr은 문자열 상수의 주소 값을 받아 초기화된다.

이를 문자열 배열(char형 포인터 배열)이라고 표현하고, 여러 개의 문자열을 저장할 수 있는 특징을 갖는다.






'language > C|C++' 카테고리의 다른 글

포인터 배열과 문자열 배열  (0) 2016.08.08
typedef  (0) 2016.08.06
FILE* fopen  (0) 2016.07.26
문자와 문자열 처리 함수  (0) 2016.07.25
데이터 상수화, 포인터 상수화  (0) 2016.07.21
블로그 이미지

saylin

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


각각의 node에 대해서 위와 같은 기준을 적용해서 균형 인수 값을 모두 구할 수 있다.


AVL 트리는 균형 인수(Balance Factor)를 기준으로 트리의 균형을 잡기 위한 재조정의 진행 시기를 결정한다.

즉, 균형 인수의 절대값이 2 이상인 경우 re-balancing을 진행한다.



'language > 자료구조' 카테고리의 다른 글

연결리스트와 포인터 멤버 연산자(->)  (0) 2016.07.28
블로그 이미지

saylin

,

error C4703

language/debug 2016. 8. 7. 16:53
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

BTreeNode * RemoveLeftSubTree(BTreeNode * bt)

{

                  BTreeNode * delNode;

 

                  if(bt != NULL) {

                                   delNode = bt->left;

                                   bt->left = NULL;

                  }

                  return delNode;

}

 

BTreeNode * RemoveRightSubTree(BTreeNode * bt)

{

                  BTreeNode * delNode;

 

                  if(bt != NULL) {

                                   delNode = bt->right;

                                   bt->right = NULL;

                  }

                  return delNode;

}


error C4703: 초기화되지 않았을 수 있는 로컬 포인터 변수 'delNode'이(가) 사용되었습니다.

(error C4703: potentially uninitialized local pointer valibale 'delNode' was used)



위의 경우, 디버그-> 프로젝트 속성 -> 일반 -> C/C++ -> SDL 검사 속성을 '아니오'로 변경하면 해결된다.

(Debug -> [Project Name] Properties -> General -> C/C++ -> SDL Check)


혹은, 


위 error는 포인터 변수를 초기화해주지 않아서 발생하므로, 


                  BTreeNode * delNode NULL;



위와 같이 해당하는 코드에 null값을 대입해주면 문제가 해결된다.






'language > debug' 카테고리의 다른 글

runtime check failure #2  (0) 2016.07.18
_CRT_SECURE_NO_WARNINGS  (0) 2016.05.07
블로그 이미지

saylin

,