C指针基础入门

关于C语言指针

一、 引子
计算机中不同类型的数据占用字节数不用。例如:int 占用4字节,char占用1个字节。为了正确找到这些数据 必须为每个字节编上特定的号码,即地址。且每个字节的编号是唯一的。 正如CPU访问内存是我要的是地址 不是变量名和函数名。 源文件被编译和链接成可执行程序后,都能被替换成地址。

二、 指针变量
定义(语法):detatype *name =value;

例子: int p
”表示是一个指针变量 int表示该指针变量所指向的数据的类型。
int *p /float *p 类型分别是int * float * 而不是 int型 和 float型.

赋值:
1° int a =100;
2° int *p =&a;//取a的地址
int *p =&a ;
//这两种取址方式等价
//是一个特殊符号 表明是一个指针变量 定义时必须带 *
//而给他们赋值时 因为已经知道了它是一个指针变量 就没必要再带上
号了。

int *p;
p =&a;

3° 值得注意的是,p需要一个地址,在a的前面必须加一个取地址符“&”,否则是不对的。

指针变量可以多次写入:

//定义普通变量
float a =99.5, b=10.6;
char c =’@’,d=’#’;
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
p1 = &b;
p2 = &d;

地址变换:

#include <stdio.h>

int main()
{
    int a=15,b=22,c=66;
    int *p;  
    
    p = &a; //取a变量的地址   
    *p = b; //将b值赋给(*p) 即将a置为b 
    c = *p;//将c值置为b
    
    return 0;
}

加了printf()后的运行结果:
地址监控
这样我们通过指针就把a,b,c这3个值都赋了22了;
我们不难发现“”在不同场合下 有着不同的作用:*
1.可以用在指针变量的定义中,表明这是一个指针变量 用于和普通变亮区分开
2.**使用时在指针变量前加
表示获取指针指向的数据,或者说表示的数据本身**。
3.定义指针变量的int p和使用指针变量的p的意义完全不同,int 是一种类型,而是一种符号
交换两个变量的值

#include<stdio.h>
int main()
{
	int a =100,b=99,temp;
	int *pa = &a,*pb = *b;
//交换开始
	temp =*pa;//将a值保存到temp
	*pa = *pb;//将b值交给a
	*pb = temp;//再把保存起来的a值交给b
	printf(“a=%d , b=%d\n”,a,b);
	return 0;
}

当然这些步骤完全能够用一个容器(变量)c来完成。而指针是间接修改的。

&p和 &pa:
&p可以理解为(&p),&p表示取变量p的地址(等价于pa),
(&p)表示取这个地址上的数据(等价于
pa) ;*&a 仍然等价于a;
&*pa 可以理解为&(*pa) *pa 表示取得pa指向的数据(等价于a),&(*pa)表示数据的地址(等价于&a) 所以&*pa等价于pa.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值