C语言_指针(Type *)

1



1> 内存空间

1


1


//--------------------------//
内存空间4个属性:变量a
  1>内存地址:0x0060FEFC2>内存大小:4Byte;
  3>数据类型:int4>数据数值:1//--------------------------//
//--------------------------//
//--------------------------//0x0060FEFC】:
1>[变量a]1字节,内存地址编号,
2>指向了a的整个4Byte空间;   
这类型的数据,称为【指针】;

//能找空间的数据,称为指针;
//--------------------------//

0x0060FEFC 
地址为啥惯用16进制表示?

用十进制表示 6,356,732
1> 16进制表示数,更简短;
2> 前缀0x,与其他数据易区分;
//--------------------------//

? 0x0060FEFC 为什么指向的是
 4Byte空间,而不是8Byte空间?
//--------------------------//

2> 指针类型 :Type *

2

//--------------------------//
 0x0060FEE8
 0x0060FEE0 指向8字节内存空间,
 数据类型为 double------------------------
 0x0060FEF8
 0x0060FEF4 指向4字节内存空间,
 数据类型为 int------------------------
0x0060FEFF
0x0060FEFE 指向1字节内存空间,
数据类型为 char//--------------------------//

------------------------
?问:
假设一个数据地址为0x0060FEE4,
他指向(多少)字节的内存空间,
存储的数据类型为什么?
------------------------
这就需要给地址分配一个类型,
C语言中
char * : 字符指针
指向1字节空间,数据类型为charint * :整型指针
指向4字节空间,数据类型为intdouble *
指向8字节空间,数据类型为double...
【类型 *】 构成指针类型
【类型】指针所指数据类型;
----------------------------
那么0x0060FEE4的类型为char *,
则它 指向1字节空间,
     数据类型为char//--------------------------//

3> 指针变量

//--------------------------//

int *    pa;
char *   pc;
double * pd; 
用指针类型定义的变量,
             称为指针变量;  
//--------------------------//
//--------------------------//
 指针变量存储空间 4Byte;
//--------------------------//
#include <stdio.h>

int main()
{

    printf("char *   > %d Byte\n", sizeof(char *));
    printf("int *    > %d Byte\n", sizeof(int *));
    printf("double * > %d Byte\n", sizeof(double *));

    return 0;
}

//--------------------------//
char *    > 4 Byte
int *     > 4 Byte
double *  > 4 Byte

//--------------------------//
0x0060FEE8
0x 00 60 FE E0

32位地址,寻址空间为4GByte
-------------------------

?内存空间为 8G, 16G,32G...,
有些空间找不到? ^_^
//--------------------------//

4> 取指针 &

44

//--------------------------//
&: 取指针,运算符;(读指针)

2个功能:
	1> 读出【变量】地址;
	2> 读出【地址】类型;
----------------------------
&num :
	1> 读出num地址 0x0060FEFC
	2> 读出地址类型 int *----------------------------
注意:
char *pc = &num; // (错误)

因为:
&num读出地址类型为 int *
赋值给 char *, 类型不匹配;
//--------------------------//

5> 间接运算符 *

//--------------------------//
#include <stdio.h>

int main()
{
    int num = 1;
    int *ptr = &num;

    /* 内存地址 */
    printf("num > %p\n", &num);
    printf("ptr > %p\n", &ptr);

    /* 内存数据 */
    printf("num = %d\n", num);
    printf("ptr = %X\n", ptr);

    /* 指针变量间接运算 */
    *ptr = 8;

     /* 内存地址 */
    printf("num > %p\n", &num);
    printf("ptr > %p\n", &ptr);

    /* 内存数据 */
    printf("num = %d\n", num);
    printf("ptr = %X\n", ptr);

    return 0;
}

在这里插入图片描述

//--------------------------//
间接运算符 *
  对指针变量间接运算,
  实现间接读写变量空间;
----------------------------
// 写
num = 8;  /* 直接对num写8 */
*ptr = 8; /* 间接对num写8 */

----------------------------
// 读
int d = 0;
d = num;  /* 直接对num读 */
d = *ptr; /* 间接对num读 */ 

//--------------------------//

6> 指针变量运算

#include <stdio.h>

int main()
{
   int num = 1;
   int *ptr = &num;

   /* 内存地址*/
   printf("num > %p\n", &num);
   printf("ptr > %p\n", &ptr);

   /* 内存数据 */
   printf("ptr = %X\n", ptr);

   ptr  = ptr + 1;

    /* 内存数据 */
   printf("ptr = %X\n", ptr);

    return 0;
}

33

//--------------------------//

ptr + 1,实际是加4,
因为ptr的类型为 int *//--------------------------//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值