주소

· C언어
배열의 문자열 초기화는 여러 가지 방법이 있는데 가장 대표적인 대입 연산자를 사용한 방법으로는 두 가지가 있다. 배열 요소에 하나씩 대입해가며 마지막에 널 문자까지 넣어주는 방법과 배열 선언과 동시에 바로 큰 따옴표를 이용해 문자열을 초기화하는 것이다. 하지만 여기서 유의할 점이 있다. C언어를 조금 공부해봤다면 다들 아시겠지만 문자열은 C언어 컴파일 과정에서 주소값을 반환한다. 그런데 배열 선언 동시에 초기화하는 것은 주소를 배열에 넣는 것이 아니라 각각 배열의 요소가 초기화되고 마지막에 널 문자까지 붙여준다. 결국 사진의 주석처럼 선언을 이미 한 이후 대입을 시도할 시 문자열의 첫 번째 문자의 주소(문자열이 임시로 저장되어 있는 배열의 첫 번째 요소의 주소)를 char형에 넣어버리는 것이고, str1..
· C언어
결론부터 이야기하면 주소로 접근하여 문자열을 바꿔선 안 된다. 연산 자체에는 문자가 없어서 정상적으로 컴파일되지만 실행할 때 운영체제에 의해 강제 종료될 가능성이 있다. 왜냐하면 운영체제는 문자열 상수를 따로 배열의 형태로 읽기 전용 메모리 영역에 저장하며 따라서 그 값을 바꾸는 명령의 실행을 제한한다. 운영체제마다 다를 수 있으나 호환성을 고려한다면 시도하면 안 된다. 문자열은 반환값이 문자열의 시작 주소이다. 포인터 연산을 통해 문자열의 시작 주소를 알게 되고, 문자열을 사용하려면 문자열의 마지막을 의미하는 널문자가 필요하다. 그래서 컴파일러는 문자열의 마지막에 항상 널문자를 붙여준다.
· C언어
1. 주소와 포인터는 상수와 변수 차이와 같다. 1) 포인터는 변수처럼 공간으로도 사용할 수 있지만, 주소는 상수처럼 정해져 있는 값만 사용할 수 있지 공간으로는 사용할 수 없다. 예를 들면 C언어에서 등호(=) 좌측에 공간이 오고, 등호 우측에는 값이 온다. 이때 주소 값 자체는 좌측(L-value)로 올 수 없다. #include int main(void){ int a = 1; int *pa = &a; // 포인터는 변수와 같아서 L-value로 쓰이는 것이 가능하다. &a = 100; // 주소는 상수 값이라 L-value로 쓰이는 것이 불가능하다. return 0; } (위 예시는 보여주기 위함으로 작성한 것이라 실제 컴파일하면 오류를 가져온다) 2) 둘 다 산술 연산자는 사용 가능하다. 2. 포..
jayoon
'주소' 태그의 글 목록