문자열 배열의 주소 지정과 관련된 특정 항목에 대한 설명을 찾고 있습니다. 몇 가지 관련 문제가있는 것으로 보이지만 내 질문에 대해 논의한 것을 찾을 수 없었습니다. 이 질문이 나오기 전에 관련 스레드를 가르쳐주십시오.문자열에 대한 포인터 배열에 액세스
아래의 코드 조각 (printf 문 검사)에서 동일한 변수를 사용하여 메모리 위치의 값과 메모리 위치의 주소에 액세스합니다. 이것이 내가이 코드를 어떻게 작성해야하는지 확실하지 않습니다. 주소 나 값에 액세스하고 있는지 여부를 명확하게 알려주는 더 좋은 방법이 있습니까?
char *board[NUM_MAX_ROWS] = {"0101001",
"1101011"};
int main()
{
int i, num_rows=0, num_cols=0;
num_cols = strlen(board[0]);
num_rows = ARR_SIZE(board);
for (i=0; i<num_rows; i++)
printf("%s stored at %p\n", board[i], board[i]);
}
내 첫 번째 시도는 분명히 문제가 해결되지 않는이
while(*board != '\0')
{
printf("%s stored ar %p\n", *board, board);
board++;
}
처럼 보였다 :)하지만, 난 여전히이는 컴파일러에 의해 해석하는 방법에 대한 아주 확실하지 않다.
감사합니다.
첫 번째 코드가 정확합니다. 포인터 ('char *')를 두 번 전달하고있다. 인자의 해석은 형식 지정자에 의존한다. '% s'은 주소에서 시작하여 NUL 문자에서 멈추는 문자를 출력합니다. '% p'는 단순히 주소를 출력합니다. – jrok
왜 두 번째가 제대로 작동하지 않는지 설명해 주시겠습니까? – texasbruce
두 번째 부분을 오류로 컴파일하지 못했습니다. 증가 값 피연산자로 lvalue가 필요합니다 (++ 보드 참조). 나는 그것이 포인터를 증가시킬 것이라고 생각했다. – dinesh