指针基础概念

标签: c语言 指针 指针变量
571人阅读 评论(0) 收藏 举报
分类:

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/52389173

指针基础概念

指针是 C 语言的精华,正确灵活地运用,可使程序简洁、紧凑、高效。

指针是什么

“指针”即地址,一个变量的地址称为该变量的“指针”。

如果有一个变量专门用来存放另一变量的地址(即指针),则称它为“指针变量”。指针变量就是地址变量,用来存放地址,指针变量的值是地址(即指针)。

指针是一个地址,而指针变量是存放地址的变量。

指针变量

存放地址的变量是指针变量。

如何定义指针变量

定义指针变量一般形式为:

类型名 * 指针变量名

如:

int *pointer_1, *pointer_2;  

左端的 int 是在定义指针变量时必须指定的“基类型”。指针变量的基类型用来指定此指针变量可以指向的变量的类型。

说明
(1)指针变量前面的 “*” 表示该变量的基类型为指针变量。
(2)在定义指针变量时必须指定基类型。
(3)指向整型数据的指针类型表示为 “int *” ,读作 “指向 int 的指针” 或简称 “int 指针”。可以有 int * , char *, float * 等指针类型。
(4)指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。

应用指针变量

在应用指针变量时,可能有 3 种情况。

1、给指针变量赋值。

p = &a;  //把 a 的地址赋给指针变量 p

2、应用指针变量指向的变量。

如果已执行 “p = &a” ,即指针变量 p 指向了整型变量 a ,则:

printf("%d", *p);

其作用是以整数形式输出指针变量 p 所指向的变量的值,即变量 a 的值。

*p = 1;

表示将整数 1 赋给 p 当前所指向的变量,如果 p 指向变量 a ,则相当于把 1 赋给 a ,即 “a = 1;”。

3、引用指针变量的值。

printf("%o", p);

作用是以八进制数形式输出指针变量 p 的值,如果 p 指向了 a,就是输出 a 的地址,即 &a 。

注意
(1) & 取地址运算符, &a 是变量 a 的地址。
(2) * 指针运算符(或称 “间接访问” 运算符), *p 代表指针变量 p 指向的对象。

实例展示:

#include <stdio.h>

int main() {
  int a = 100, b = 10;
  int *pointer_1, *pointer_2;
  pointer_1 = &a, pointer_2 = &b;
  printf("a = %d, b = %d\n", a, b);
  printf("*pointer_1 = %d, *pointer_2 = %d\n", *pointer_1, *pointer_2);
  return 0;
}

运行结果为:

a = 100, b = 10
*pointer_1 = 100, *pointer_2 = 10

指针变量作为函数参数

函数的参数不仅仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

示例代码:

#include <stdio.h>

int main() {
  void swap(int *p1, int *p2);
  int a, b;
  int *pointer_1, *pointer_2;
  printf("Please enter a and b(format: a, b): ");
  scanf("%d, %d", &a, &b);
  pointer_1 = &a, pointer_2 = &b;
  if(a < b) swap(pointer_1, pointer_2);
  printf("max = %d, min = %d\n", a, b);
  return 0;
}

void swap(int *p1, int *p2) {
  int temp;
  temp = *p1;
  *p1 = *p2;
  *p2 = temp;
}

运行结果:

Please enter a and b(format: a, b): 25, 66
max = 66, min = 25

swap 是用户自定义函数,它的作用是交换两个变量( a 和 b )的值。swap 函数的两个形参 p1 和 p2 是指针变量。

用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值得变化依然保留下来。

通过调用函数使变量的值发生变化,在主调函数中可以使用这些改变了的值。

不能企图通过改变指针形参的值而使指针实参的值改变。

C 语言中实参变量和形参变量之间的数据传递时单向的“值传递”方式。用指针变量做函数参数时同样要遵循这一规则。不可能通过执行调用函数来改变实参变量的值,但是可以改变实参指针变量所指变量的值。

注意: 函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。

欢迎加QQ群交流: 365532949
Homepage: http://junkchen.com

查看评论

android 基础概念 一

什么是Activity? 通俗一点说Activity就是一个界面,这个界面里面可以放置各种控件。Activity的界面也是用xml文件表示的,放置在res->layout下面。每生成一个新的Acti...
  • marryshi
  • marryshi
  • 2016-02-24 16:35:44
  • 783

C++基础概念总结(一)

**序 - 此次C++总结是为Qt学习做准备,把很多自己以前不清楚的概念用自己的话描述一遍。包括数据类型,运算符,流程控制不再详述接下来记录一个自定义数据类型枚举类型枚举类型在程序中,可能需...
  • C_Redrock
  • C_Redrock
  • 2017-07-12 17:08:01
  • 158

[C#]一些.NET基础概念

应用程序域(application domain) 应用程序域是.NET中的一个重要技术改进,它用于减少运行应用程序的系统开销. 应用程序域是分离组件的一种方式,它把任何一个进程分解到多个应用程序...
  • edcvf3
  • edcvf3
  • 2017-03-23 21:08:21
  • 249

python 基础概念整理

正则表达式中 字符串前面加r,表示的意思是禁止字符串转义 >>> print "asfdas\n" asfdas >>> print "asfdas\\n" ...
  • u012995136
  • u012995136
  • 2017-02-04 15:25:19
  • 349

C语言试题集(包括基础概念、函数、指针、结构体等等)

  • 2009年12月17日 11:24
  • 5.88MB
  • 下载

mysql数据库基础概念

MYSQL是支持sql(structured Query Language,结构化查询语言)数据库语言的一个关系数据库...
  • happy_cheng
  • happy_cheng
  • 2014-07-27 22:04:18
  • 621

Python基础概念_2_基础概念

基础概念 3 基础概念 3.1 数字   计算机最初设计时就是为了做数据运算的,所以针对这个概念应该不会陌生。在Python的世界里数主要有三种类型: 整数、浮点数和复数,详见下例:   a) 5 ...
  • shenliang1985
  • shenliang1985
  • 2017-06-15 14:41:32
  • 419

C#基础概念.docC#基础概念.doc

  • 2010年02月02日 15:23
  • 90KB
  • 下载

python机器学习日志.01 ———三天搞定Python基本功.网页提纲

大纲( Outline) 第1天:Python和科学编程介绍。 Python中的基础知识: - 数据类型 - 控制结构 - 功能 - I/O文件第2天:用Numpy,Scipy,Matplotl...
  • ML_kidudu
  • ML_kidudu
  • 2018-01-27 13:35:51
  • 142

c++基础概念.doc

  • 2018年01月07日 13:44
  • 2.53MB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 18万+
    积分: 2175
    排名: 2万+
    博客专栏