指针知识点

十三、 指针

Ø 指针变量的声明:类型名 * 指针变量名;

Ø 通过指针变量访问它所指向的普通变量的值

先将普通变量的地址赋值给指针变量,再通过指针运算符* 得到普通变量的值。

int *p,x,y;

x=3;

p=&x;

则printf(“%d”,*p);会打印出3即x的值

y=*p;则y的值变为3

*p=5;则x的值变为5

Ø 指针变量加上(减去)一个位移的效果

若指针变量存入的是数组元素的地址,则其加一减一得到的是那个数组元素下一个或前一个元素的地址。

int a[10];p=&a[3];

*p得到的是a[3]的值。

若p++;此时p存放的是a[4]的地址&a[4]; *p得到的就是a[4]的值。

或p--;此时p存放的是a[2]的地址&a[2],*p得到的就是a[2]的值。

Ø 行指针

i.主要是对于二维数组来说的,二维数组每行都有自己的地址,第0行地址用数组名表示,第i行地址为数组名+i;而想要得到二维数组里一个元素的地址,必需先得到其所在行的地址,然后再由那个地址得到元素的地址,比如说 int a[3][4];定义了一个二维数组,该二维数组第0行的地址为a,第1行的地址为a+1,第2行的地址为a+2,想从行的地址得到元素的地址,需在行地址前加上指针运算符“*”,即*a就是第0行首个元素的地址即a[0][0]的地址,而a[0][2]的地址就是在a[0][0]的地址基础上加上位移量2,即*a+2,然后想得到a[0][2]这个元素的值呢就再加上一个指针运算符“*”,即*(*a+2),类似地,想得到a[2][2]这个元素的值呢就是*(*(a+2)+2)

ii. 定义行指针变量:类型名 (*变量名)[数组长度];

如int (*p)[4],a[3][4]; p=a;此时就可把p当成a来用,用法同上所述。

Ø 判断是否合法访问数组元素:若是指针法访问,判断指针后跟的是否地址;若是下标法访问,判断下标有无越界。

Ø 函数指针:函数名即为函数的地址(指针)

i. 函数指针变量的定义:类型名 (*变量名) (形参列表);如 int (*p)();

ii. 赋值:指针变量=函数名;设有个函数其函数名为max,则要将该函数的地址给p的话只要执行如下语句即可p = max;

Ø 指针数组:指针数组的数组元素都是指针变量,是用来存放变量的地址的,定义格式为类型名 * 变量名[数组长度]; 如int* p[10];

Ø 指向指针的指针:指针变量也是一种变量,故在内存中也有对应的一个地址,而要存放指针变量的地址,就要求助于用来存放指针变量的地址的指针变量,定义格式 类型名** 变量名;如 int *p1; int **p2;int a=3;可进行赋值p1=&a;p2=&p1; 则a 、*p1和**p2的值都是3.

//用指针将俩句英文句子连接起来
#include<stdio.h>
#define N 100
#include<string.h>
voidf(char *s1,char *s2,char *s3)
{
	while(*s1)
	*s3++=*s1++;
	while(*s2)
	*s3++=*s2++;
	*s3='\0';
}
intmain(){
	char a[N],b[N],c[N];
	gets(a);
	gets(b);
	f(a,b,c);
	puts(c);
 } 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值