亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 语言指针实战:从入门到高级编程

C 语言指针易学且有趣。某些编程任务用指针更容易,动态内存分配等任务离不开指针。因此学习指针是成为合格 C 程序员的必要步骤。让我们循序渐进学习。

众所周知,每个变量都是内存位置,每个内存位置有其地址,可用取地址运算符 & 访问。下例打印变量地址:

Live Demo

 #include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x\n", &var1 ); printf("Address of var2 variable: %x\n", &var2 ); return 0; } 

编译执行输出:

 Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6 

什么是指针?

指针是一个变量,其值为另一变量的地址,即内存位置的直接地址。像任何变量或常量,使用前必须声明指针以存储变量地址。指针变量声明通用形式:

 type *var-name; 

type 为指针基类型,必须是有效 C 数据类型;var-name 为指针变量名。声明指针用的星号 * 与乘法星号相同,但此处用于指定变量为指针。合法指针声明示例:

 int *ip; /* pointer to an integer */ double *dp; /* pointer to a double */ float *fp; /* pointer to a float */ char *ch /* pointer to a character */ 

所有指针值的实际数据类型相同,均为表示内存地址的长十六进制数。不同数据类型指针的唯一区别在于指针指向的变量或常量的数据类型。

如何使用指针?

指针常用操作:(a) 定义指针变量,(b) 将变量地址赋给指针,(c) 通过指针访问地址处的值。使用一元运算符 * 返回操作数指定地址处变量的值。下例演示这些操作:

Live Demo

 #include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* pointer variable declaration */ ip = &var; /* store address of var in pointer variable*/ printf("Address of var variable: %x\n", &var ); /* address stored in pointer variable */ printf("Address stored in ip variable: %x\n", ip ); /* access the value using the pointer */ 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 

空指针

良好实践是声明指针变量时若无确切地址则赋 NULL 值。赋 NULL 的指针称为空指针。

NULL 指针是多个标准库中定义的值为零的常量。示例:

Live Demo

 #include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0; } 

编译执行输出:

 The value of ptr is 0 

大多数操作系统不允许程序访问地址 0 的内存,因该内存由 OS 保留。但地址 0 有特殊含义:指针不指向可访问内存位置。约定俗成地,指针包含零值即假定指向空。

检查空指针可用 if 语句:

 if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */ 

指针进阶

指针概念虽多但易懂,对 C 编程至关重要。以下重要指针概念 C 程序员应掌握:

序号概念及说明
1指针算术

指针可用四种算术运算符:++、--、+、-

2指针数组

可定义数组存放多个指针。

3指向指针的指针

C 允许指针指向指针,以此类推。

4向函数传递指针

按引用或地址传递参数,使被调函数能修改调用函数中的实参。

5从函数返回指针

C 允许函数返回指向局部变量、静态变量或动态分配内存的指针。

C语言

  1. C 语言变量、常量与字面量完全指南
  2. C 语言存储类完全解析:auto、extern、static、register
  3. 精通C语言指针:专家级实战教程
  4. 深入理解C语言数组与指针的关系
  5. C语言函数参数传递:地址与指针实战指南
  6. 精通C语言结构体与指针:实战指南
  7. C++ 指针精通:核心概念、代码示例与实战应用
  8. C 语言变量、数据类型与常量实战指南
  9. C 语言指针完全指南:类型、用法与最佳实践
  10. 深入理解 Verilog 赋值语句:类型、语法与最佳实践
  11. 精通Python global关键字:用法、时机与最佳实践
  12. 理解 Java 变量类型:综合指南