C 언어 - 포인터 테마 (2)

4053 단어 C 언어--토대
1. 문자 포인터 및 문자열
  • C 언어는 문자열을 문자 배열로 처리합니다.
  • 통상적으로 우리는char 데이터 형식의 바늘 변수를 문자 바늘 변수라고 하는데 문자 바늘 변수는 수조 변수와 밀접한 관계를 가진다. 그도 문자열을 처리하는 데 사용된다.
  • 초기화 문자 포인터는 문자열의 첫 번째 주소를 이 문자 포인터에 부여하는 것이지 전체 문자열을 이 문자 포인터에 부여하는 것이 아니다.
  • C 프로그래밍에서 문자 포인터가 문자열의 상수를 가리킬 때 포인터가 가리키는 대상의 값을 수정할 수 없다.

  •           char * a = "zhoubofen";*a ='a'----- 틀렸습니다.수정할 수 없습니다.
    #include 
    #include 
    int main(int argc, const char *argv[])
    {
    	char  a[] = "zh";
    	char * p ;
    	char * q = "eg";  //    q          
    
    
    
    	printf("%s \r
    ",q); p = a;// a *p = 'a'; // a a printf("%s \r
    ",q); // q printf("%d \r
    ",strlen(p)); // p printf("%s \r
    ",p);// p return 0; }

    출력 결과:eg eg 2ah
  • 예: cha*p = "zhoubofeng";char * q ='zhoubofeng'; -------p와 q는 같은 문자열의 상수를 가리키기 때문에 메모리 관리의 측면에서 p와 q에 저장된 주소(가리키는 위치)는 동일하다. 즉, 인쇄된 주소는 같다는 것이다
  • .
    2. 포인터 그룹
  • 바늘수 그룹은 같은 저장 유형과 데이터 유형을 가진 몇 개의 바늘 변수로 구성된 집합을 가리킨다. 

  • 포인터 배열의 일반 형식: * []
    포인터 그룹 이름은 이 포인터 그룹의 시작 주소를 표시합니다.
    
    #include 
    #include 
    int main(int argc, const char *argv[])
    {
    	int a[2][3] = {{1,2,4},{5,6,7}};
    	int *p[2];
    	int i =0 ;
    	p[1] = a[0]; //                      
    	p[0] = a[1];
    
    
    	for(i=0;i<3;i++)
    		printf("%p %d \r
    ",p[0]+i,*(p[0]+i)); for(i=0;i<3;i++) printf("%p %d \r
    ",p[1]+i,*(p[1]+i)); return 0; }

    출력: 0xbfedce24 5 0xbfedce28 6 0xbfedce2c 7 0xbfedce18 1 0xbfedce1c 2 0xbfedce20 4
    결론: 포인터 그룹에 저장된 것은 주소이고 그룹의 모든 요소는 포인터 변수이다.
    2차원 그룹은 여러 개의 1차원 그룹으로 구성된 것으로 볼 수 있으며 2차원 그룹의 줄 주소 a와 열 주소 a[0]를 직접 바늘 그룹에 넣을 수 있다.
    예: int*p[2];int a[3] ;p+1은 p[1]을 가리킨다.p[1] = a인 경우*(p+1)+2와 p[1]+2는 모두 a[2]를 가리킨다.
    제목: 2차원 그룹의 모든 원소의 합을 구하려면 바늘 그룹을 사용하십시오.
     
    1. 포인터 배열이 차지하는 공간을 계산하는 방법. ------int * q[3]    sizeof(q)  == 12 Bety;
    2, 포인터 그룹 이름 더하기 1, 몇 바이트 이동.----------------- 포인터 배열에 포인터(주소)가 놓여 있으면 이동하는 것은 모두 4바이트입니다.
    3. 포인터 배열 이름은 어떤 포인터에 해당한다. ------------예를 들어 int*p[2];     int *  *q ;       q = p ;
     
    다중 포인터
  • 정의: 바늘 변수를 가리키는 바늘 변수를 다단계 바늘이라고 부른다.

  • 처리 데이터를 가리키는 바늘 변수를 일급 바늘 변수라고 하는데 일급 바늘 변수라고 약칭한다.
    한편, 1급 지침 변수를 가리키는 지침 변수를 2급 지침 변수라고 하는데 약칭 2급 지침이라고 한다.
  • 2단계 포인터 형식: **
  • 예: int *q;  int ** p ;    p  = &q ;  int m = 10 ; q = &m; 
    q 저장된 변수 m의 주소, *p는 변수 m의 데이터를 가리킨다.p는 바늘 변수 q의 주소를 저장하고 *p는 바늘 변수 q의 데이터를 가리키며 q의 데이터는 변수 m의 주소이며 **p는 변수 m의 데이터를 가리킨다.
  • 2단계 지침에 1을 더하면 몇 바이트가 이동합니까? 2단계 지침에 1을 더하면 목표를 이동합니다. 2단계 지침의 목표는 1급 지침입니다. 즉, 1을 더하면 1급 지침을 이동하면 4바이트가 이동합니다.

  • 주: 다단계 지침은 편폭이 많지 않지만 절대 간단하기 때문이 아니다. 주로 기초로 하고 이해에 중심을 두어야 한다. 처음 접촉할 때 많이 쓰지 않고 대부분이 일급 지침으로 대체할 수 있다.
    4.void 포인터 1급const
    1. void 포인터
  • 정의:void지침은 데이터 형식을 확정하지 않은 지침 변수로 강제 형식 변환을 통해 이 변수가 모든 데이터 형식 변수를 가리키도록 할 수 있다.

  • 일반 형식:void*
  • void지침은 강제로 노란색을 바꾸기 전에 산술 연산을 할 수 없습니다---테스트:void지침은 강제로 노란색을 바꾸지 않고 주소가 불규칙적으로 증가합니다.
  • void 포인터를 사용하는 장면: 메모리 관리를 할 때의malloc() 함수로 루트 만들기;이 포인터는 빠른 정렬에도 사용됩니다.

  • 제목: 보이드 포인터를 이용하여 1차원 그룹을 훑어봅니다.
    #include 
    
    int main(int argc, const char *argv[])
    {
    	int a[] = {1,2,4,5,6};
    	void * p ; 
    	int n = 0;
    	int i = 0;
    
    	p = (void*)a ;
    	n = sizeof(a)/sizeof(int);
    	while(i

    2. const 변수
  • const 수식 변수
  • 역할: 상량화 변수의 값.
    일반 형식: const 변수 이름 = []
  • const 손질 지침
  • i, 상수 포인터 대상 표현식: const* [=]
    상량화 포인터 목표는 포인터를 통해 목표의 수치를 바꾸는 것을 제한하지만 저장된 주소 값은 수정할 수 있습니다.
    예: const int* p;*p는 수정할 수 없지만 p는 변경할 수 있습니다.
    ii, 상수 포인터 변수:*const[=]
    예: int m;int* const p = &m ;p는 수정할 수 없지만 *p는 변경할 수 있습니다.
    const 수식: 수식한 사람은 변경할 수 없습니다.
     
    후어: 지침을 C언어의 영혼이라고 합니다. 지침을 제대로 배우지 못했습니다. 아무도 당신이 C언어를 익혔다고 믿지 않을 것입니다. 이 편은 지침의 몇 가지 기본 지식점을 진열할 수 밖에 없습니다. 주로 이런 지식점 뒤에 대량의 제목 실례를 연습해서 지침을 본능으로 만들었습니다. 화이팅!!!!!!!

    좋은 웹페이지 즐겨찾기