学习笔记(62):C语言入门到精通-指针初探

立即学习:https://edu.csdn.net/course/play/10534/378148?utm_source=blogtoedu

什么是指针
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
type *var_name = NULL;
基本类型指针:
int *p = NULL;           /* 一个整型的指针 */
double *p = NULL;        /* 一个 double 型的指针 */
float *p = NULL;         /* 一个浮点型的指针 */
char *p = NULL;          /* 一个字符型的指针 */
“*”的位置只要是在中间就可以,可以是 int* p, int * p, int *p,具体怎么放,根据项目的编程规范或者约定来。保持统就好。

怎么理解指针?
图片: https://uploader.shimo.im/f/fW0GybTk0z3vRGyV.png

寻址空间:
寻址空间一般指的是 CPU 对于	内存寻址	的能力。通俗地说,就是能最多用到多少内存的一个问题。

32 位机器:2^32 = 0xFFFFFFFF
64 位机器:2^64 = 0xFFFFFFFFFFFFFFFF

基本类型指针使用
int *p = NULL;   // 首先定义 int 类型的指针
int a = 0;       // 再定义一个 int 类型的变量

printf("p 指向地址: %p", p);  // 输出指针的值
p = &a;          // 通过取地址运算符'&'获取变量 a 的内存地址,赋值给指针变量
printf("p 指向地址: %p", p); // 输出指针的值
printf("a 变量地址: %p", &a); // 输出变量的地址值

a = 10;          // 修改变量的值
printf("a = %d, *p = %d", a, *p);

// 通过指针来修改变量的值
*p = 20;
printf("a = %d, *p = %d", a, *p);

/*[看视频]实战编码:编写上面代码,通过命令行输入变量 a 的初始值,然后再输入一个新的值通过指针 p 访问变量     地址,来修改变量 a 的值。分别输出修改前后的值。*/

使用指针时会频繁进行以下几个操作:
定义一个指针变量;
把变量地址赋值给指针;
访问指针变量中可用地址的值。
注意:在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。NULL 指针是一个定义在标准库中的值为零的常量。

检测指针的有效性
int *p = NULL;
if (p) {
  // 如果指针不为空,使用指针。
} else {
  // 如果指针为空,做异常处理。
}

/* [看视频]实战编码:验证在指针为 NULL 和不为 NULL 的情况下,程序怎么运行效果。*/

野指针
int *p;     // 不是

void far() {
  int *p1;  // 是
  int *p2 = 0x0000FFFF;  // 是
  int a = 0;
  int *p3 = &a;  // 不是
}

/* [看视频]实战编码:编写程序验证它是不是野指针。*/

课后作业
如课程中的例子一样,定义一个 char 类型的指针,通过指针来修改 char 变量的值,输出修改前后的指针和变量地址,分别使用变量和指针的方式输出变量的值。
int main() {
  char c = 'A';
  char *p = &c;
  
  printf("p = %p, &c = %p\n", p, &c);
  printf("c = %c, *p = %c\n", c, *p);
  *p = 'a';
  printf("c = %c, *p = %c\n", c, *p);
  
  return 0;
}

// 看视频

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道知极限编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值