C语言基础7

⼀、C语⾔中的指针

与指针相关的概念

• 内存:程序和数据通常存储在硬盘上,他们会被持久保存。硬

盘可以存储很多东西,但其传输数据的速度较慢,所以需要在

运⾏程序或者打开数据时,这些数据必须从硬盘上传递到另⼀

种容量较⼩但速度很快的存储器上,之后才送⼊CPU执⾏处理。

这样的存储器就是内存。

• 内存地址:为了正确访问内存单元,每个内存单元都拥有⼀个

编号,这些编号是连续的,称作地址。编号对应的内存以字节

为单位划分。

内存地址的⼤⼩:内存地址的⼤⼩与操作系统的位数相关,32

位操作系统占4个字节,64位操作系统占8个字节。


⼆、指针变量的定义

• 指针变量:特指存储内存地址的变量,统称为指针变量或指针

• 指针变量的定义:

/*

int *指针变量的类型,表⽰整型指针

p为变量名

NULL为初始值,恒等于0

*/

int *p = NULL;


指针变量与基本类型变量定义⽅式的区别:为了区别于普通变

量的定义,*在变量定义的时候起到了修饰作⽤,修饰所定义的

变量p只能⽤于存储指针。

/*

为了防⽌出现如下的逗号表达式,导致变量的类型混乱,*与

变量名相邻

*/


三、与指针变量相关的运算符

取址运算符—&

/*

&:取址运算符,获取number变量对应内存单元的⾸地址,单⽬

运算

*/

int number = 5;

//获取number的地址赋值给指针变量p

int *p = &number;

printf("p -> %p\n", p);

p -> 0x7fff5fbff85c



取内容运算符—*

int number = 5, digital = 12;

int *p = &number;

//*为取内容运算符,等价于number变量,单⽬运算

printf("content -> %d\n", *p);

//为指针变量p赋值新的内存地址

p = &digital;

//为指针变量指向的存储空间赋值

*p = 200;

指针变量的重指向:将⼀个已定义的指针变量赋值为

另⼀个变量的⾸地址称之为指针变量的重指向


指针变量的算数运算

强调:指针不是类型,真正的类型是地址,指针(指针变量)

是指存储地址这种数据类型的数据的变量

• 例如:

int number = 5;

• 5是整数,⽽number是存储该整数的变量。指针就好⽐number

变量,⽽地址就如5这个整数。

指针能够进⾏算数运算本质原因在于算数运算是地址这种数据类

型的本能,正因为地址具有加减运算的能⼒,才使得指针作为存

放地址的变量也能够进⾏算数运算,如number++


• 指针变量的数据类型:指针变量的数据类型只限定了指针在参

与算数运算的时候⼀次偏移多少个字节,通过*取内容的时候

读取多少个字节 int number = 5;

int *p = &number;


四、指针变量与数组的关系

关于数组名

注意:数组名并不是指针

• ⽰例:

int array[10] = {0};

printf("array -> \t%p\n", array);

printf("&array -> \t%p\n", &array);

printf("array + 1 -> \t%p\n", array + 1);

printf("&array + 1 -> \t%p\n", &array + 1)

• 结果:

array -> 0x7fff5fbff840

&array -> 0x7fff5fbff840

array + 1 -> 0x7fff5fbff844

&array + 1 -> 0x7fff5fbff868


关于数组名

• 分析:

• array与&array指向同⼀个内存地址,但其通过算数运算后的结果不

同。array + 1偏移⼀个数据类型所占字节数(4个字节),&array +

1偏移整个array数组所占字节数(40个字节)

printf("%ld\n", sizeof(array));

• 这⾏代码会得到整个数组的内存⼤⼩,事实可以证明:&array获取的

是整个数组的⼤⼩。数组名取地址等价于对数组取地址


• array与&array的结果都是取数组的⾸地址,但其数据类型不同;

• array表⽰&array[0],即表⽰数组⾸个元素的地址,array + 1表⽰数

组⾸地址 + sizeof(数组元素类型)。

• &array虽然值为数组⾸个元素的地址,但其数据类型实为:int (*)[10]

表⽰长度为10的⼀维整型数组指针类型,&array + 1表⽰数组⾸地址

+ 数组总⼤⼩。

注意:数组名是⼀个符号地址常量,不是变量,所以不能⾃增,⾃减


指针与数组

int array[10] = {0};

int *p = array;

• p指针保存数组的⾸地址

• *p、*(p + 1)、(*p) + 1分别为多少

• 被赋值为数组⾸地址的指针p可以被当作数组名来使⽤

• p[1] = 3;

• 等价于 array[1] = 3;

• 等价于 *(array + 1) = 3;

• 等价于 *(p + 1) = 3;

• 等价于 p[1] = 3;

四、指针与字符串

• C语⾔⽤⼀维字符数组来描述字符串的概念,故指针与字符串类似于

指针与数组的概念。

• 字符指针可以操作单个字符,也可以操作整个字符串。

string为数组名,同时也是⼀个代表数组⾸地址的地址常量

*/

char string[] = "lanou3g";

char *p = string;

//操作字符

*(p + 1) = 'A';

//操作字符串

printf("string: %s\n", p);

• %s格式控制符的作⽤:printf函数的格式串中如果包含%s格式控制

符,择需要对应⼀个指针,函数内部会循环对指针做移位运算来得到

每⼀个字符,知道遇到字符串的结束标志符’\0’结束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,440评论 3 44
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 687评论 0 1
  • 版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...
    gfson阅读 2,965评论 0 6
  • C语言大总结 一、基础: 1、进制、位权、1字节等于8位(位是计算机的最小储存单位,字节是计算机最小存储单元)、十...
    雾中探雪阅读 2,826评论 1 36
  • 今晚天天的作业很晚才写完,其实主要卡在了写生字上,六个字:一、二、三、上、口、目,每个写一行,貌似很简单,但对于我...
    于辉的简书阅读 385评论 0 4