指针定义

变量和内存

  1. 内存用于存储数据,最小的单元是字节,每个单元都有一个地址编号,从0X0000000~0XFFFFFFFF
  2. 变量有大小,指的是在内存占了几个字节。
  3. 变量有地址,是变量在内存的位置,用&号可以取得地址。
  4. 变量赋值,就是向内存写入数据。读变量的值,就是从内存读取数据。
  5. 每个变量都有自己的内存地址,绝不会有两个变量的地址相同。
  6. 程序每次运行时,变量的地址是不一样的,无法预测与不需要预测

查看变量地址

地址是一个整数: 0x00000000 ~ 0xFFFFFFFF

int a = 0;

double b = 0;

printf(“%08X \n”, &a);

printf(“%08X \n”, &b);

也可以

printf(“%p \n”, &a); // p: pointer

如何表示地址

地址是整数,是否可以用 int ? (理论上可以。。。)

但是为了强调它是个内存地址,提出一些新的类型。。。

 

char*  :  表示一个char型变量的地址

short* :  表示一个short型变量的地址

int*   :  表示一个int型变量的地址

float* :  表示一个float型变量的地址

double*:  表示一个double型变量的地址

unsigned char*: 表示一个unsigned char型变量的地址

...

XXX*   : 表示XXX型变量的地址

 

以下以int型变量为例:

int a = 10;

int* pa = &a;

定义一个变量pa,类型为int*,初始值为&a。

有两种叫法:

pa指向了一个int型变量

pa所在的内存是一个int型整数

我们称int*为指针类型,pa为指针类型的变量(简称指针)

关于指针

1指针也是变量,是可以变的。可以把它视为一种整型变量。

int a=10;

int b=11;

int* p=&a;

p=&b;

2 不同类型的指针,不能互相赋值

int a = 10;

int* pa = &a; // pa: int*型

double* pb = pa; // 错!! 左侧double*, 右侧int*

(int*: 指向int型变量, double*:指向double型变量,肯定不能互相赋值)

 

又如:

char  a = 78;

float*  p = &a; //错:左侧为float*,右侧为char*

 

3指针即地址,地址是整数,所以指针是一个整数类型

int a ;

int* p = &a;

printf(“addr: %08X \n”, p);

 

也可以使用 “%p”,效果和%X差不多

printf(“addr: %p\n”, p);

  1. 星号的位置,均可

int* a;

int * a;

int *a;

  1. 星号操作:按地址访问

已知一个int型变量

1直接使用变量名来赋值

int a=10;

a=11;

2使用指针(按地址访问,直接修改内存)

int a=10;

int* pa=&a;//pa指向a

*pa=0x11;

*pa=0x1314;

3区分指针定义语句中的*和按地址访问的*

int a = 10;

int b = 11;

int* p ; // 定义一个指针, 注意int*作为一个整体

p = &a; // p指向a

printf(“ %d \n”, *p); // *p: 取得p处内存的值

p = &b; // p指向b

printf(“%d \n”, *p); // *p: 取得p处内存的值

只有指针才能支持*操作

4有一个指针变量p,则*p用于访问p指向的变量(p指向的内存)。

或者称作:*p用于访问p指向的内存(读、写)

int a = 0x1314;

int* p = &a;  // p指向a所在的内存

*p += 2;

--------------------------

int b = *p;  // 取得p指向内存的值

int c = *p + 2;

5其他指针类型的用法也是完全一样的

char a = 78;

char* p = &a;

*p = 79;

----------------

double m = 1.1;

double* pm = &m;

*pm = 1.2

...完全一样

小结

  1. 提出新的类型char* int* double*...用于表示某型变量的地址
  2. 学习按地址访问:星号操作
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值