透彻理解指针的概念

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

#include <stdio.h>
int main(){
    int a = 100;
    char str[20] = "tanyusheng";
    printf("%#X, %#X\\n", &a, str);
    return 0;
}

2.需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。

定义指针变量的方式:
datetype *name;
datetype *name=value;

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

是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带,给指针变量赋值时不能带*。

4.通过指针变量取得数据

#include <stdio.h>
int main(){
    int a = 15;
    int *p = &a;
    printf("%d, %d\\n", a, *p);  //两种方式都可以输出a的值
    return 0;
}

假设 a 的地址是 0X1000,p 指向 a 后,p 本身的值也会变为 0X1000,p 表示获取地址 0X1000 上的数据,也即变量 a 的值。从运行结果看,p 和 a 是等价的。

5.在不同从场景中含义不同,定义指针变量时表示这是一个只能变量,与普通变量区分开来;获取指针变量时前面加*表示获取指针所指向是数据,或者说表示指针指向数据发本身。

6.给指针变量赋地址值时不能加*号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,473评论 3 44
  • 前言 最近真的是忙的不可开交,公司一直给安排任务,连学习和写笔记的时间都没有了,落下好几次课的笔记都没有写,所以我...
    Xiho丶阅读 1,544评论 1 12
  • 指针 指针是什么 为了了解指针的概念,我们先来看一个小故事。话说福尔摩斯派华生到威尔爵士居住的城堡去取回一个重要的...
    去留无意hmy阅读 567评论 0 1
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,364评论 0 6
  • 先讲一个段子: 某人四十多了还碌碌无为,于是跑去找算命先生。算命先生掐指一算,然后问:“一个好消息,一个坏消息,你...
    杨颖__指数成长阅读 3,265评论 0 0