指针

指针概念

数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。

下图是 4G 内存中每个字节的编号(以十六进制表示):
在这里插入图片描述
我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB,最小的地址为 0,最大的地址为 0XFFFFFFFF。
下面的代码演示了如何输出一个地址:

#include <stdio.h>
int main(){
 int a=100;
 char str[20]="Hello World!";
 printf("a的内存地址:%#X\n",&a);
 printf("str的首内存地址:%#X",str);
 return 0;
} 
//运行结果: 
//a的内存地址:0X62FE1C
//str的首内存地址:0X62FE00

注:

%#X表示以十六进制形式输出,并附带前缀0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址,不需要加&。

CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。

假设变量 a、b、c 在内存中的地址分别是 0X1000、0X2000、0X3000,那么加法运算c = a + b;将会被转换成类似下面的形式:

0X3000 = (0X1000) + (0X2000);

( )表示取值操作,整个表达式的意思是,取出地址 0X1000 和 0X2000 上的值,将它们相加,把相加的结果赋值给地址为 0X3000 的内存

变量名和函数名为我们提供了方便,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不用直接面对二进制地址。

指针定义和赋值

  1. 定义一个指针变量
 #include <stdio.h>
int main(){
 //指针类型 *指针变量名 ;
  
 //短整型指针变量 
 short *p2;
 
 //长整型指针变量 
 long *p3;
 
 //整型指针变量 
 int *p4;
 
 //双精度指针变量 
 double *p5;
 
 //字符指针变量 
 char *p6;
 return 0;
} 

2.给指针赋值(指针变量存储的是地址,即给指针变量赋地址)

#include <stdio.h>
int main(){
 int a=0;
 
 //定义一个指针,定义时赋值: 
 int *p=&a;
 
 //先定义,后赋值
 int *p1;
 p1=&a; 
  
 return 0;
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值