1. const 가 * 의 왼쪽에 위치 시 포인터가 가르키는 대상이 상수.. char const * a
a[0]='a' 불가
2. const 가 * 의 오른쪽에 위치 시 포인터 변수가 상수 char * const a
a = "abcd " 불가
타입명과 const 위치는 바뀌어도 뜻은 똑같다.
void fun (const char *a)
void fun (char const *a)
2014년 12월 23일 화요일
2014년 12월 18일 목요일
포인터
포인터는 변수의 타입이며 무엇이든 그 컴퓨터의 주소를 담을수 있다.
포인터 형을 일반 지역변수에서 선언하던, 전역에서 선언하던 함수의 인자에서 선언하던 해당 컴퓨터/컴파일러의 주소범위 내의 사이즈 타입의 변수에 그 포인터 원형의 주소가 담기게 된다.
애초에 int a char b 처럼 변수의 이름은 컴파일시 심볼테이블에 의해 실 주소로 치환이 된다.
이것을 이해하면 포인터의 주소개념을 더 명확히 할수 있다.
거기서 오프셋 연산이나 역참조를 통한 직접접근이 가능하게 되는것이다. 포인터가 담기게되는 스택형 변수와 힙 포인터를 착각하게 되는것을 주의하자.
char * pc -> char 타입이 담겨있는 주소. 즉 pc의 실제 메모리 주소를 가르킨다.
char ** ppc -> char * 타입이 담겨있는 주소. 역시 ppc 주소를 가르키며 그 안에는 당연히 char* 타입의 데이터가 담겨있어야 한다.
포인터 형을 일반 지역변수에서 선언하던, 전역에서 선언하던 함수의 인자에서 선언하던 해당 컴퓨터/컴파일러의 주소범위 내의 사이즈 타입의 변수에 그 포인터 원형의 주소가 담기게 된다.
애초에 int a char b 처럼 변수의 이름은 컴파일시 심볼테이블에 의해 실 주소로 치환이 된다.
이것을 이해하면 포인터의 주소개념을 더 명확히 할수 있다.
거기서 오프셋 연산이나 역참조를 통한 직접접근이 가능하게 되는것이다. 포인터가 담기게되는 스택형 변수와 힙 포인터를 착각하게 되는것을 주의하자.
char * pc -> char 타입이 담겨있는 주소. 즉 pc의 실제 메모리 주소를 가르킨다.
char ** ppc -> char * 타입이 담겨있는 주소. 역시 ppc 주소를 가르키며 그 안에는 당연히 char* 타입의 데이터가 담겨있어야 한다.
2014년 12월 9일 화요일
C 에서의 extern
사용되고 있는 변수가 다른 파일에서 정의(기억장소가 할당되도록 함) 되었다면
그 외부변수를 사용하기 위해 extern 으로 '선언' 하고 사용하여야 한다
보통 한 파일에서 아래와 같은 방식으로 사용한다
extern 에서는 생략이 가능하다
즉 아래의 표현은 동일하다
그 외부변수를 사용하기 위해 extern 으로 '선언' 하고 사용하여야 한다
보통 한 파일에서 아래와 같은 방식으로 사용한다
file1.c
int gInt = 1; //정의와 선언
file1.h
extern int gInt;
file2.c
#include "file1.h"
gInt = 2;
단 배열의 extern 은 그 크기를 명사하여야 하나extern 에서는 생략이 가능하다
즉 아래의 표현은 동일하다
extern int array[10];
extern int array[];
2014년 12월 7일 일요일
콜렉션 FIND predicate 함수를 사용하는 3가지 방법
콜렉션 개체
public class person
{
public int Anni { get; set; }
public string Nome { get; set; }
public person(int anni, string nome)
{
this.Anni = anni;
this.Nome = nome;
}
}
무명 메소드 (델리게이트 사용)
//I assume I have a non-empty list List agenda = new List();
/* .. load objects from DataBase .. */
//I create a simple search criteria string personToBeSearched = "mario";
person mario = agenda.Find(delegate(person p) { return p.Nome == personToBeSearched; });
람다 식 사용
//I assume I have a non-empty list List agenda = new List();
/* .. load objects from DataBase .. */
//I create a simple search criteria string personToBeSearched = "mario";
person mario = agenda.Find(p => p.Nome == personToBeSearched;);
델리게이트 사용
private static bool findTeen(person p)
{
if (p.Anni < 18)
return true;
return false;
}
List BlockBuster_GameOnly = agenda.findAll(findTeen);
C# 에서 (C,C++ dll) 로드시 hresult 0x8007007e Exception from HRESULT: 0x8007000B
개발한 PC에있는 dll이 실행하는 PC에 없는 경우이다..
http://www.dependencywalker.com/ 를 통해 내가 만든 dll 의존성 검사를 한후
존재하지 않는 dll을 추가시켜주면 된다.
그러나 의존하는 dll이 많은 경우?
해당 DLL 컴파일시 옵션을 아래와 같이 수정해도 된다
/MT switch instead of
설정 -> c/++ 코드 생성 -> 런타임 라이브러리에서 /md로 되어있는것을 /mt로 변경한다
http://www.dependencywalker.com/ 를 통해 내가 만든 dll 의존성 검사를 한후
존재하지 않는 dll을 추가시켜주면 된다.
그러나 의존하는 dll이 많은 경우?
해당 DLL 컴파일시 옵션을 아래와 같이 수정해도 된다
/MT switch instead of
/MD
—(it's found in the UI under "Configuration Properties" -> "C/C++" -> "Code Generation" -> "Runtime Library").설정 -> c/++ 코드 생성 -> 런타임 라이브러리에서 /md로 되어있는것을 /mt로 변경한다
피드 구독하기:
글 (Atom)