집 >백엔드 개발 >C#.Net 튜토리얼 >C언어 포인터의 이해와 활용에 관한 최신 내용을 정리한 것입니다.
정의: 포인터는 값이 다른 변수의 주소인 변수입니다. 주소는 메모리의 위치를 나타냅니다. 기억해야 할 것은 배열 변수 자체가 포인터라는 것입니다.
주소에도 종류가 있다는게 이상하지 않나요? 포인터도 주소를 나타내는 것 아닌가요? 예를 들어보세요:
int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */
사실 포인터는 항상 주소를 나타내는 16진수입니다. 소위 유형은 포인터가 가리키는 변수의 유형을 나타냅니다.
이전 예제에서 포인터를 정의하는 방법을 알아야 하므로 16진수 주소와 포인터가 가리키는 데이터를 인쇄하는 방법을 알아야 합니다.
//通过&运算符获取了i的地址并保存到intP中去 int *intP; = &i; printf("intP存储的地址为:%p,存储的地址指向的数据为:%d\n", intP, *intP);
포인터는 ++, --, + 작업을 수행할 수 있습니다. , -
또한 포인터는 ==, 87a288dd01dd4e56dfc6fb1912fca6c6
int intArr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //先定义一个指针执行数组第一个元素 int *intArrP = &intArr[0]; printf("此时intArrP存储的地址为:%p,数据为:%d\n", intArrP, *intArrP); //自增一下看看结果(每增加一次,它都将指向下一个整数位置) intArrP++; printf("自增以后intArrP存储的地址为:%p,数据为:%d\n", intArrP, *intArrP);
와 같은 관계 연산자를 사용하여 비교할 수도 있습니다. 포인터는 포인터
int data = 5201314; int *p1 = &data; int **p2 = &p1; printf("%d\n", data); //都是5201314 printf("%d\n", *p1); printf("%d\n", **p2);
쌍을 가리킬 수도 있습니다. 포인터의 사용 주로 구조 자체의 특수성 때문에 약간 특별합니다. 구조에서 값을 사용하려는 경우 일반적으로 구조 자체를 사용하는 경우와 구조를 가리키는 포인터를 사용하는 경우가 있습니다. 자세한 내용은 다음 예를 참조하세요. :
struct Node { int val; }; //先建立一个结构体数据 struct Node node; node.val = 1; struct Node *nodeP; //创建一个指向刚刚的结构体的指针 nodeP = &node; printf("%d\n", nodeP->val);//指向结构体的指针用-> printf("%d\n", node.val);//结构体自身用.
관련글:
위 내용은 C언어 포인터의 이해와 활용에 관한 최신 내용을 정리한 것입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!