指针 改变坐标 c语言,C语言指针 指针就是地址

内存的单位是字节,例如一个256MB的机器,有256*1024*1024 字节的存储单位,每个字节都有一个对应的地址,通过该地址可以找到该块内存,就像我们的通讯地址一样。

每一个变量由若干个字节组成,例如:int age = 20 由 4个字节组成,变量中第一个字节的地址称为变量的地址。#include 

int main(int argc,const charchar *argv[]){

int age = 20;

printf("size=%lu\n",sizeof(age));

printf("%p\n",&age);//这个就是输出age的首地址

//1:内存里面的每个字节都有地址

//2:变量的地址是第一个字节的地址(首地址),地址表明了变量在内存中的位置,地址就是指针

//c语言里面只要是说到指针就是指的地址

//3:地址,指针是常量 ,指针变量 = (指针变量)

//4: 指针是有类型的,就是指针类型,JAVA中的地址叫做引用,类型叫做引用类型

return 0;

}

我们将变量的第一个字节的地址称为变量的指针。指针变量是保存某一个地址的变量,首先它是一个变量,只不过是保存的地址的。

&取地址运算符,取变量的地址; * 间接访问运算符,存取指定位置的值。

变量声明的时候标识该变量是指针,使用指针变量的时候前面加上这个*,标识取该位置的值。int a = 100;

int *p=&a;

//*p就是a的别名

//对*p的改变就是对a的改变

//&,*

//& 取地址运算符

int ii=100;

printf("%p\n",&ii);//&i 三个金元宝在哪里啊?地址

int *pp =ⅈ

printf("%p\n",pp);//这里是%p

printf("%d\n",*pp);//*p三个金元宝,注意这里是%d

*pp=80;

printf("%d\n",ii);

ii=200;

printf("%d\n",*pp);

未指向任何变量的指针,称为“悬空指针”其实就是未初始化的指针//指针的初始化

intint *ip;//悬空地址,0x0

printf("%p",ip);

int b = 100;

intint *pb = &b;//初始化

//指针变量pb

//pb 指向了b

//*pb 等价于b

//*pb != pb

intint *p1;

int j = 200;

p1=&j;//赋值

指针的赋值//指针赋值:简单的来说就是地址的拷贝

int q = 100;

intint *pq = &q;

printf("pg=%p\n",pq);

intint *pqp = pq;

printf("pqp=%p",pqp);

*pq = 200;

printf("q=%d\n",q);

printf("pq=%d\n",*pq);

printf("pqp=%d\n",*pqp);

指针作为函数的参数// 指针作为函数的参数,在c语言里面默认的就是使用拷贝的形式来做的,如果想要真的切换两个变量的值,使用swapAddress

int aa = 1,bb = 2;

swap(aa,bb);

printf("aa=%d,bb=%d",aa,bb);

swapAddress(&aa,&bb);

printf("aa=%d,bb=%d",aa,bb);

//交换两个值

void swap(int a, int b){

int temp =a;

a = b;

b=temp;

}

void swapAddress(intint *a,intint *b){

int temp =*a;

*a = *b;

*b=temp;

}

不想改变的参数,使用constant ,类似java 里面的finalvoid test(intint *p){

*p =1000;

}

void testConst(const intint *p){

//如果编译的时候下面的会报错 assignment of read-only location '*p'

//*p =1000;

}

//有的时候不想改变呢?将参数设置为const 类似java 里面的final,

int testp = 100;

test(&testp);

printf("i=%d\n",testp);

testConst(&testp);

printf("i=%d\n",testp);

指针还可以作为返回值//指针还可以作为返回值:

int cc=100,dd=200;

intint *ee = max(&cc,&dd);

printf("最大值为%d",*ee);

intint *max(intint *a,intint *b){

if(*a>*b){

return a;

}else{

return b;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值