반응형
1. 문자 포인터
c언어에서 문자포인터는 선언은 *을 붙히지만 포인터변수에 값을 저장 할때 &를 안붙혀도 된다.
문자배열 자체가 포인터 이기 때문이다. 포인터변수=문자배열대표값
아래 코드를 참조
#define _CRT_SECURE_NO_WARNINGS //비쥬얼 스튜디오에서 strcpy를 쓰려면 붙혀줘야함
#include <stdio.h>
#include <string.h>
void main(void)
{
//문자 포인터 배열
char ochar[] = "Korea";
char ochar2[5+1] = "China"; //5글자를 입력하려면 글자 총 길이에 +1을 해줘야함
char* pchar;
pchar = ochar; //&를 안붙혀줘도 된다.
puts(ochar); // "Korea"
puts(pchar); // "Korea"
strcpy(pchar, "Japan");
puts(ochar); // "Japan"
puts(pchar); // "Japan"
memcpy(ochar, ochar2, sizeof(ochar2));
//
//아래와 같이 써도 된다.
//memcpy(ochar, ochar2, sizeof(char)*5); //china가 5바이트 이므로 길이에 5를 넣어줬다.
//memcpy(ochar, ochar2, (strlen(ochar2))); //strlen으로 스트링의 길이를 넣어줬다.
//strcpy(ochar, ochar2); //단순 스트링 카피
//strncpy(ochar, ochar2, strlen(ochar2)); //단순 스트링 카피
printf("ochar 배열마지막 %p \n", ochar[5]); //마지막 배열의 주소는 0인 것을 볼수 있다.
puts(ochar); // "Japan"
puts(ochar2); // "Japan"
puts(pchar); // "Japan"
}
결과값
Korea
Korea
Japan
Japan
China
China
2. 숫자 포인터
정수 포인터는 포인터 변수에 값을 넣을 때 주소를 넣어줘야 하므로 &를 붙혀야 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
//정수 포인터 배열
int oint=100;
int* pint;
pint = ∮ //포인터 변수에 주소 값
//문자배열과는 달리 포인터와 정수배열은 같지 않음
printf("oint: %d \n", oint); //처음 넣었던 100이 나옴
printf("pint: %d \n", *pint); // pint를 &oint로 연결 시켰으므로 100 나옴
printf("pint: %p \n", pint); //pint의 주소값 출력
//pint = 200; //pint는 포인터 정수변수이므로 *를 붙혀줘야함
*pint = 200;
//pint[0] = 200; //포인터변수는 배열이므로 이형태로 써도됨
printf("oint 두번째: %d \n", oint);
printf("pint 두번째: %d \n", *pint);
printf("pint 두번째: %p \n", pint);
}
위에서는 숫자를 대입할 때 * pint를 썼는데 숫자형은 memcpy로 대입할 수도 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void)
{
//정수 포인터 배열
int oint = 100;
int* pint;
int oint2 = 300;
pint = ∮ //포인터 변수에 주소 값
//문자배열과는 달리 포인터와 정수배열은 같지 않음. 따라서 &를 붙혀줘야함
printf("oint: %d \n", oint); //처음 넣었던 100이 나옴
printf("pint: %d \n", *pint); // pint를 &oint로 연결 시켰으므로 100 나옴
printf("pint: %p \n", pint); //pint의 주소값 출력
/* pint에 값을 대입할땐 아래와 같은 형식 사용 가능 */
*pint = 200;
//pint = 200; XX 이렇게 쓰면안됨 //pint는 포인터 정수변수이므로 *를 붙혀줘야함
//*pint = oint2; 정수로 직접 써도 되고 값을 넣어도 됨
//pint[0] = 200; //포인터변수는 배열이므로 이형태로 써도됨
//memcpy로 써도 됨
//memcpy(&oint, &oint2, sizeof(int)); //정수 변수는 값이 주소에서 꺼내온 것이므로 &를 붙혀줘야함 반면 문자 변수는 &를 안붙혀줘도됨
/****************************************************/
printf("oint 두번째: %d \n", oint);
printf("pint 두번째: %d \n", *pint);
printf("pint 두번째: %p \n", pint);
printf("sizeof(int): %d \n", sizeof(int));
}
결과값
oint: 100
pint: 100
pint: 000000111C70F4E4
oint 두번째: 200
pint 두번째: 200
pint 두번째: 000000111C70F4E4
sizeof(int): 4
반응형
'C언어' 카테고리의 다른 글
select 함수 (0) | 2023.03.10 |
---|---|
5. 구조체 안의 멤버 변수에 특정한 문자열 잘라서 집어넣기 / 문자열을 특정 문자열 부터 삽입하기 (0) | 2022.08.18 |
4. 구조체를 함수에서 사용하기 (0) | 2022.08.15 |
3. 구조체 포인터 (0) | 2022.08.15 |
1. C언어 콘솔 찍기 (0) | 2022.05.31 |