指针粗浅介绍(2)

四.指针的一些运算

1.指针与整型量相加减
首先说一下,指针加(减)整型量,其结果依然是指针,且指针类型不变。
p + 1的结果是:指向 p 所指向的空间的下一个指类元素空间。
p 的值与 p + 1的值,差值的 绝对值 是sizeof ( p 的指类 )…sizeof(char)诸如此类。

#include<stdio.h>

int main(){
	int a[] = {1,2,3,4};
	int *b = &a[0];
	
	printf("  a[0]的首地址为%p\n  a[1]的首地址为%p\n  a[2]的首地址为%p\n ",&a[0],&a[1],&a[2]);
	printf("  b的值为%p\n  b+1的值为%p\n", b , b+1);
	
	return 0;
} 

跑代码结果如下
在这里插入图片描述
int类型为4B,所以指针运算b+1,指向的移动距离是4B。
接下来我们再试一试double类型,由于指针类型与数组被定义类型不同,这里运行代码出现了警告,没关系,只是为了验证p + 1的结果是:指向 p 所指向的空间的下一个指类元素空间。

	double *c = &a[0];
	printf("  c的值为%p\n  c+1的值为%p\n", c , c+1);

在这里插入图片描述
2.指针与指针相减
指针与之指针相减,其结果的绝对值是两个指针所指向的空间的指类元素个数。 因此,两个相减的指针的指类必须保持一致。

#include<stdio.h>

int main(){
	int a[] = {3,2,3,5};
	int *b = &a[0];
	int *c = &a[3];
	
	printf("%d %d",b-c,c-b);

	return 0;
} 

在这里插入图片描述
3.指针与指针相加是语法错误
在这里插入图片描述

五.指针与数组

1.数组名称是常量(所以不可以被赋值)。
2.数组名称的本质是该数组的首地址常量(指针常量)。所以,数组名称可以做指针的所有操作
3.由于字符串是多个字符,需要多个存储空间,通常用字符数组。首先定义字符数组。

#include<stdio.h>

int main(void)
{
	char s[70]="Guo xiaoying is a good girl!";
	char *p=s;


	p="cute";
	//这是一个指针应用错误示范。仅仅改变p指针的指向,对与数组 s中的内容未更改。 
	printf("%s\n",s);
	
	p=s+18; 
	*(p+0)='c';
	*(p+1)='u';
	p[2]='t';
	p[3]='e'; 
    printf("%s\n",s);
    return 0; 
	
 } 

在这里插入图片描述
得证,数组名称是指针
即*(a+i)<=> a[i]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值