c语言上机实验九指针,【C语言】基础(九)指针(示例代码)

·

指针

指针:指针就是地址

指针变量:存放变量地址的变量

使用指针的目的:要通过指针能够找到被指的变量,或者说要通过指针间接访问被指的变量

取变量;栈区

int *p 指向int类型的指针

%p 输出指针

&取址符

初始化

int *p=NULL; 必须初始化

定义时放*(*p=&a),赋值时不能放(p=&a )

* 类型说明的作用

间接访问指针指向内存的值的作用

p=&a; 打印:p为地址,*p值为a

void 类型的指针

可以指向任何变量,但在使用时,需要进行强制类型转换之后才能使用

void *p=&a;

printf("%d",*(int*)p);

指针大小:都为8个字节

指针运算:只能加减、不能乘除

p+n = p+n*sizeof(指向类型)

指针访问数组

1、数组名实际上就是一个指向该数组中第一个元素的指针

2、在实际数组元素前面加一个&与 p=&a[1];

3、在数组名后加偏移量,改变指向的数组元素

*(p+n) = array[n] = *(array + n);

p[0] == array[0];可以这样

访问数组两种方式:

下标法访问 数组名[下标] 指针[下标]

const指针

const int* p 指针指向的变量不可改变、可以修改指向、其指向内存被const修饰不可改变

(const 在 * 左边,修饰int)

int const* p 值不可变

int *const p (const在*右边,修饰指针)指针不能改变指向

const int *const p 只能初始化,都不能改

const在星号左边:

修饰的是指针指向的内存

1.指针可以改变指向

2.不可以通过指针改变其所指内存的值

const在星号右边:

修饰的是指针变量本身

1.指针不可以改变指向

2.可以通过指针改变其所指内存的值

const在星号左右

1.不可以改变指向

2.不可以通过指针修改值

注意:变量本身仍可以通过变量名去修改

指针与字符串

字符数组表示字符串

用字符指针指向一个字符串表示,指向首地址

char* str1 = "beijing" str1仅记录首地址

beijing存在数据区(常量不能改),不能根据str1[1]=E;修改

strcat不能用指针拼接。

strcpy

指针与函数

指针变量作为函数参数:将指针变量以实参的形式传递给函数,进行的是地址的传递,所以可以在函数中改变实参的值

数组名作为函数的实参和形参:进行地址传递

函数的返回值是一个指针:函数的返回值类型必须定义为指针类型

函数指针:指向函数的指针

数据类型(*指针变量名) (形参列表)

int (*p)(int a) --int(* )(int a)指向返回值为Int的函数指针

int *p1(int a) -- (int*) (int a) 返回值为int*函数。函数名为p1

括号不能省

int *(*p2)(int*a,int*b) ----指向返回值为int*,参数为。。的函数指针

指向函数的指针变量的说明:

1、把函数首地址赋给指针变量时,直接写函数名即可,不用写括号和函数参数

2、利用指针变量调用函数时,要写明函数的实际参数

p=func1;p(20) == func1(20)

//函数名就是函数的首地址

//表示函数指针P指向func1

指针访问二维数组

int a[3][4];

int (*p)[3][4];

p=&a; *p == a;

(*p)[1][1];

p[0] ==*p;

p[0][0][0]=a[0][0]

p[0][1]=a[1];

指针的指针(二维指针)

如果一个指针变量存放的是又一个指针变量的地址,则称这个指针变量为指向指针的指针变量。

int a;

int *p=&a;

int **p=&p;

**p == a

指向数组的指针

定义:类型名称 (*指针名)[数组长度]

如:int a[5]={1,1,1,1,1};int (*p)[5]=&a;

定义时不加括号就成了指针数组,因为[]优先级比*高。

数组指针定义时的数组长度,元素类型需与指向的数组相同

int(*p)[5];指向数组长度为5的整型数组的指针

char* (*p1)[10];指向类型为char* [10]的数组指针

int *p2[10];一个数组 类型为int* [10]

数组指针指向的是整个数组,不是单个元素

数组指针加1,相当于p+sizeo(数组名)

访问数组元素:a[0],*a,*(a+1),(*p)[0],p[0][0] (*p)==a, p[0]=a;

指针(数组)

如果数组元素都是指针变量,构成指针数组

一般形式:类型名称 * 数组名[数组长度]

int* a[10];每个元素都是int* 指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值