Search

'Programming/C'에 해당되는 글 2건

  1. 2016.05.14 배열과 포인터의 차이점
  2. 2016.05.14 포인터

배열과 포인터의 차이점

Programming/C 2016. 5. 14. 17:21 Posted by ­행복
모든 주소는 의미를 가진다.
배열의 이름은 연속적인 메모리의 시작 주소이다.
포인터변수로 배열의 요소에 접근 가능

1.
sizeof(포인터) = 4
sizeof(배열의 이름) = 배열의 크기

2. 포인터 변수는 상수(주소값)를 대입이가능하나, 배열의 이름에는 값 대입이 불가능(배열의 이름은 그 자체가 메모리 주소값인 상수이다.)

3. 아래의 문자열 선언 : 상수를 저장하는 메모리영역에 할당, 문자열의 시작주소값을 포인터변수 str이 저장
char *str = "ABC";
str[0]='D'; // 이렇게 못씀

'Programming > C' 카테고리의 다른 글

포인터  (0) 2016.05.14

포인터

Programming/C 2016. 5. 14. 12:10 Posted by ­행복
메모리 주소 1개는 1바이트의 메모리 공간을 갖는다.
변수는 자료를 저장할 수 있는 메모리 공간의 이름이다. (a,b,c)
포인터형 주소를 저장하는 공간은 32비트 운영체제에서는 4바이트, 64비트 운영체제에서는 8바이트가 필요하다.
long 자료형은 32비트운영체제에서는 4바이트, 64비트운영체제에서는 8바이트이다.

예) sizeof(char)=1
      sizeof(*char)=4 (32비트)
      sizeof(*char)=8 (64비트)
      char형 포인터 변수=4바이트

*은 자료형을 선언할때랑 포인터변수앞에 붙일때랑 다르다. 주소가 가리키는 메모리의값을 의미

32비트에서 단일프로세스는 총 4기가바이트 크기의 가상메모리를 가질 수 있다.
가장 큰 주소(0xffff ffff)가 4바이트를 넘지 않으므로 포인터변수에 모든 변수를 저장 가능하다.

모든 자료형의 주소는 의미를 가지며 덧셈이나 뺄셈을 할 수 있다. 각 주소에 정수를 더하거나 빼면 주소가 가지는 데이터의 자료형 따라 주소의 결과가 달라진다.

2차원 이상의 포인터 변수에 1을 더하면 포인터 크기만큼 건너뛰겠다는 의미로 4바이트가 증가한다(32비트OS에서)

'Programming > C' 카테고리의 다른 글

배열과 포인터의 차이점  (0) 2016.05.14