Latest web development tutorials

C 포인터

C 언어 포인터가 쉽고 재미있게 학습. 포인터를 통해, 당신은 C 프로그래밍 작업 중 일부의 구현을 단순화 할 수 있습니다, 동적 메모리 할당과 같은 일부 작업, 거기에 어떤 포인터는 시행하지 않는다. 그래서, 학습 포인터가 필요하다, 좋은 C 프로그래머가되고 싶어요.

아시다시피, 각 변수가 메모리 위치를 가지며, 각각의 메모리 위치는 운전자 어드레스의 액세스가 메모리의 어드레스를 나타내는 하이픈 (&)를 사용할 수 정의. 출력 변수 주소를 정의합니다 다음 예를 고려 :

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("var1 变量的地址: %x\n", &var1  );
   printf("var2 变量的地址: %x\n", &var2  );

   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

var1 变量的地址: bff5a400
var2 变量的地址: bff5a3f6

위의 예를 들면, 우리는 어떤 메모리 주소 및 액세스 방법에 대해 이해합니다. 의 포인터 무엇인지 살펴 보자.

포인터는 무엇인가?

포인터 값이 다른 변수, 메모리 위치, 즉, 직접 어드레스의 어드레스되는 변수이다.같은 다른 변수 또는 상수가 다른 변수 포인터 메모리 어드레스를 사용해야하기 전에이 선언된다. 포인터 변수 선언의 일반적인 형태는 다음과 같다 :

type *var-name;

여기서, 타입은베이스 타입에 대한 포인터이며, 이것은 유효 C 데이터 타입,VAR-name은 포인터 변수의 이름이어야한다. 포인터 별표 * 곱셈은 별표 (*)를 사용하여 선언하는 데 사용됩니다 동일합니다. 그러나이 성명에서, 별표는 변수가 포인터를 지정하는 데 사용됩니다. 다음은 유효한 포인터의 선언입니다 :

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch     /* 一个字符型的指针 */

모든 포인터는 정수, 부동 소수점, 문자열, 또는 다른 데이터 유형이 같은지 값의 실제 데이터 유형은 16 진수 긴 메모리 어드레스를 나타내고있다. 데이터 포인터의 종류의 유일한 차이점은 포인터 변수 또는 정수 데이터 유형이다.

어떻게 포인터를 사용 하는가?

, 포인터 변수, 포인터에 할당 된 변수 주소를 정의 포인터 변수 가능한 주소의 값에 액세스 : 다음 작업을 할 때 자주 포인터를 사용합니다. 이는 지정된 피연산자 주소에있는 변수의 값을 반환하는 단항* 연산자를 사용하여 수행된다.다음의 예는 이러한 작업 관련 :

#include <stdio.h>

int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */

   ip = &var;  /* 在指针变量中存储 var 的地址 */

   printf("Address of var variable: %x\n", &var  );

   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %x\n", ip );

   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

는 C NULL 포인터

변수 선언시 정확한 주소가 할당 될 수없는 경우에는, 포인터 변수의 NULL 값이 좋은 프로그래밍 연습 할당. 푸 NULL 포인터 값이널 포인터라고합니다.

NULL 포인터는 표준 라이브러리 제로 상수로 정의된다. 다음 프로그램을 고려 :

#include <stdio.h>

int main ()
{
   int  *ptr = NULL;

   printf("ptr 的值是 %x\n", ptr  );
 
   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

ptr 的值是 0

메모리가 운영 체제에 예약되어 있기 때문에 대부분의 운영 체제에서, 프로그램은 메모리 주소 0에 대한 액세스를 허용하지 않습니다. 그러나, 메모리 주소 0은 포인터가 액세스 메모리 위치를 가리 키지 않음을 나타냅니다, 특별한 의미가 있습니다. 포인터가 null 값을 (제로 값)가 포함되어있는 경우 그러나 규칙에 따라, 그것이 아무것도 가리 키지 않는 것으로 가정한다.

다음과 같이 널 포인터를 확인하려면, if 문을 사용할 수 있습니다 :

if(ptr)     /* 如果 p 非空,则完成 */
if(!ptr)    /* 如果 p 为空,则完成 */

C 포인터 상세

C에서, 매우 간단하지만 매우 중요한 개념과 관련된 많은 포인터가 있습니다. C 프로그래머가 명확해야 포인터와 관련된 몇 가지 중요한 개념은 아래에 나와 있습니다

概念描述
指针的算术运算 可以对指针进行四种算术运算:++、--、+、-
指针数组 可以定义用来存储指针的数组。
指向指针的指针 C 允许指向指针的指针。
传递指针给函数 通过引用或地址传递参数,使传递的参数在调用函数中被改变。
从函数返回指针 C 允许函数返回指针到局部变量、静态变量和动态内存分配。