AutoLeaders控制组——C语言指针的学习笔记

AutoLeaders控制组——C语言指针的学习笔记

目录

一、 概述

二、  指针基本操作

1.访问变量地址

2.指针变量说明

3. 指针变量初始化

4. 通过指针访问变量

5. 指针链

6. 指针表达式

7. 指针的递增与比例因子

8. 指针操作规则小总结

三、 指针运用

1. 指针与数组

2. 指针与字符串

3. 指针数组

4. 指针作为函数的参数

5. 函数返回指针

6. 指针和结构体

一、 概述

在C 语言中,指针是一种派生数据类型。它是从 C语言的一种基本数据类型创建而来的。指针以内存地址作为其值。由于内存地址表示在计算机内存中保存程序指令和数据的位置,因而可用指针来直接访问和操作存储在内存中的数据。

毫无疑问,指针是C语言最显著最令人兴奋的特征之一。它为C语言增加了强大的功能和灵活性。尽管对初学者来说,指针有点令人迷惑,难以理解,但是,一旦掌握,它就是一个功能强大的工具,很好使用。

在C语言中,指针使用很频繁,具备很多优点,具体包括:

(1) 在处理数据和数据表时,指针更高效。

(2)通过作为函数参数,指针可用水从西数中返回多个值。

(3)指针允许引用函数,因而便于把函数作为参数传递给其他函数。

(4)使用指向宇符串的指针数组,可节省内存的数据存储空间。

(5)指针使得C 语言支持动态内存管理。

(6)指针为操作动态数据结构 (如结构、链表、队列、栈和树等)提供了 有效的工具。

(7)指针可减少程序的长厦,降低其复杂度。

(8)指针可提供程序的运行速度,从而诚少程序的运仃时间

二、  指针基本操作

1.访问变量地址

P=&x  //把变量x的地址赋值给指针变量p

2.指针变量说明

Int *p //定义了一个整型指针(指向的变量的数据类型为整型)

3.指针变量初始化

注:未初始化的指针的值是未知的,他们可能指向错误的值。

 几种初始化指针的方式

  1. int *p;p=&变量;
  2. Int *p=&变量;
  3. Int x,*p=x;
  4. Int *p=NULL或 0;

4.通过指针访问变量

n=*p //把p指向的变量的值赋给n

*p=1 //把1赋给p指向的变量

5.指针链

Int x,*p1,**p2;p1=&x;p2=&p1; //p2表示指向p1指针的指针

6.指针表达式

C允许对指针和整数进行加减运算,指针和指针间进行减法运算

如:p+4,p-2,p1-p2

也可以用快捷运算符

P++,-p,sum+=*p

7.指针的递增与比例因子

我们知道,指针可以如下进行递增:

P1=p2+2

P1=p1+1

但需要记住的是,下面表达式:

P1++

表示是指针 p1 指向其类型的下一个值。例如,如果 p1 为整型指针,其初始值为 2800,那么经过 p1=p1+1运算后,p1的值为 2802,而不是 2801。也就是说,当指针进行递增时。所士加的值为该指针指向的数据炎型的“长度’这种长度就称为比例因于(scale factor)。

对 IBMPC 机而言,不同数据类型的长度如下:

字符1字节

整数2字节

浮点数4字节

长整数4子节

双精度数8字节

用来存储不同数据类型的字节数取决于具体的系统,且可以使用 sizeof 运算符来得到。

例如,如果x 为变量,那么sizeof(x)返回的是存储该变量所需的宇节数(奔腾机使用 4个字节来存储整数,使用2个字节来存储短整数)。

8.指针操作规则小总结

当对指针变量执行运算时,将应用以下规则:

(1)可以把另一个变量的地址赋给指针变量。

(2)可以把一个指针变量的值赋给另一个指针变量。

(3)可以使用 NULL 或零值来初始化指针变量。

(4)可以在指针变量的前面或后面添加递增或递减运算符。

(5)指针变量可以与整数值进行加减运算。

(6)当两个指针指向同一个数组时,可以用一个指针变量减去另一个指针变量。

(7)当两个指针指向相同数据类型的对象时,可以使用关系运算符对它们进行比较

操作。

(8)不能把指针变量与常量做乘法运算。

(9)两个指针变量不能做加法运算。

(10)不能把一个数值赋给地址(例如,&x=10是非法的)。

 

 

 

1.指针与数组

p=x等价于p=&x[0];

p+1=&x[1];

(1)用p++的性质来访问数组

(2)用p1-p2来计算数组部分长度

(3)用指针和数组最后一个元素进行比较,以确定是否遍历完该数组

二维数组:

*(*(p+i)+j)=a[i][j]

*(p+列数*i+j)=a[i][j]

2.指针与字符串

用指针定义数组:char *str =good;

这样指针指向g

输出:printf(%S,string1) 或 puts(string1)

在c中常量字符串总是表示指向字符串的指针

因此,这是合法的:

char *name;name=Henry;

3.指针数组

用来处理字符串表

例:

Char *name[3]={

New Zealand,

Australia,

India,

};

4.指针作为函数的参数

当把地址传递给数时,接收该地址的参数必须是指针。使用指针传递变量地址的函数调用过程称为“引用数调用”(传递变量实际值的过程称为“以值调用”)。

引用调用的数可以修改在调用中所使用的变量的值。

1) 数的参数声明为指针。

2) 在数体中使用了间接引用指针。

3) 当调用数时,地址作为实参做传

5.函数返回指针

利用变量名,数可以返回一个值,通过指针变量可以返回多个值。由于指针是C 的一种数值类型,我们也可以使函数返回一个指向调用函数的指针

 注意,所返回的地址必须是调用函数中的变量的地址。如果返回的是指向被调用函数中的局部变量的地址,将产生错误。

6.指针和结构体

放在结构体吧

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值