文档章节

C语言学习—指针

紫电_清霜
 紫电_清霜
发布于 2015/10/17 15:15
字数 718
阅读 4
收藏 0

1. 指针变量定义与使用

        指针变量

            定义:存放内存地址的变量

        //变量类型:整型指针 = 初始值:NULL恒等于0
        int *p = NULL;
        //指针变量所占字节数只与操作系统有关

        指针类型转换符%p

    printf("p = %p\n", p);

2.  取址运算符& 

int a = 3;
int *p = &a;					
printf("&a = %p\n", &a);
printf("p  = %p\n", p);

3.  取值运算符*

int a = 3, b = 5;
int *p = &a;
printf("%d\n", *p);
p = &b;						
*p = 100;
printf("%d\n", b);

    *和&是配套的操作符

4. 指针的算术运算

    只有加、减运算:

int *p = &a;
p ++;//向高位移动四个字节
p --;//向低位移动四个字节

    注意:指针类型决定移动字节数

注意事项:*p  指针变量定义时,只起修饰作用,告诉编译器p是指针

                指针变量取值时,访问内存地址为p的存储区域

5. 指针与数组

    数组

            数组:⽤用连续内存空间存储数据的构造类型。

            数组名: 数组元素⾸首地址

            例如:int array[3] = {1, 3, 8}; // array 恒等于 &array[0] 

    指针与数组

            指针可以当数组名使用   

             p[1] = 3;            

            恒等于a[1]


            恒等于*(p+1)


            恒等于*(a+1) 

    指针与数组的区别

        所占空间不同

            -指针:只与操作系统位数有关

            -数组:与元素个数和类型有关

         数组名是常量地址,不能重指向(不能赋 值)

            指针可以重指向

6. 指针与字符串

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

    例如:

char string[] = “iPhone”; //string为数组名

char *p = string;//指向字符数组⾸首地址
*(p + 1) = ‘v’;//操作单个字符
printf(“%s”,p + 1);//操作整个字符串


    指针数组

        存放指针的数组称为指针数组。

          例如

char *strings[3] = { “iOS”, “Android”, “Win8”};

7. 指针与函数

    指针作为参数

8. 结构体指针

        定义:指向结构体变量的指针,称为结构体指针 

typedef struct student stu;
stu stu1 = {0};
stu *p = &stu1;
//stu * :结构体指针类型(类型)
//p     :结构体指针变量(变量名)
//&stu1 :结构体变量地址(初值)

    结构体指针访问成员

成员变量
num 1
name  "iPhone"
sex 'm'
score 96.8f
        指针p是第一个成员变量的首地址

9. 结构体数组与指针

    结构体数组的数组名是一个结构体指针常量。

Stu stu[3] = {0};
Stu *p = stu;
//p为结构体指针变量,stu为数组名
//同 int array[3] = {0};int *p = array;

(p + i) -> num ;
使用指针p访问下标为i的元素的成员变量num

10. 结构体指针为函数参数

    函数声明:

        void printStudents(Stu *pstu, int count);

           函数操作结构体数组时,需要传入首地址和元素个数。


© 著作权归作者所有

共有 人打赏支持
紫电_清霜
粉丝 2
博文 10
码字总数 7921
作品 0
沈阳
私信 提问
业余爱好者的C程序设计学习之路

我学习和工作的方向都是化工,和 IT 专业一点边都不搭,属于程序设计爱好者一类。坚持了很多年了,谈谈我的认识。 一、为什么是C 汇编太难,直接下手会吓死宝宝的。 basic 不能考虑,因为“对...

四彩
2016/02/04
107
2
【C语言】学习笔记4——指针(1)

1. 指针:一种以符号形式使用地址的方法。   因为计算机的硬件指令非常依赖地址, 所以使用指针的程序更有效率。尤其是, 指针能有效地处理数组,数组地表示法其实是在变相地使用指针。  ...

早起的虫儿去吃鸟
08/19
0
0
libevent源码深度剖析

原文地址:http://blog.csdn.net/sparkliang/article/details/4957667 libevent源码深度剖析一 ——序幕 张亮 1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关...

晨曦之光
2012/03/09
166
0
嵌入式linux爱好者看过来

嵌入式的基础—C语言,针对C语言基础相对薄弱但是想学嵌入式的同学,我们特推出了系列课程,该系列课程包括:嵌入式Linux学习思路分析、C语言基础-数据类型、C语言基础-运算符与表达式、C语言...

farsightemb
2011/01/20
379
0
C语言编程学习之——文件详解

小辰我这次带来一个知识点,C语言里面的文件。涉及到的内容有,1、打开文件 2、读写操作3、关闭文件 4、文件指针。 1、打开文件 2、①读写文件--字符读(fgetc) ②读写文件--字符写(fputc...

小辰带你看世界
01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spak—— sparkCore源码解析之RangePartitioner源码

   分区过程概览 RangePartitioner分区执行原理: 计算总体的数据抽样大小sampleSize,计算规则是:至少每个分区抽取20个数据或者最多1M的数据量。 根据sampleSize和分区数量计算每个分区的...

freeli
9分钟前
0
0
从内部自用到对外服务,配置管理的演进和设计优化实践

本文整理自阿里巴巴中间件技术专家彦林在中国开源年会上的分享,通过此文,您将了解到: 微服务给配置管理所带来的变化 配置管理演进过程中的设计思考 配置管理开源后的新探索 配置中心控制台...

阿里云官方博客
10分钟前
0
0
MySQL用户管理,常用MySQL语句、MySQL数据库备份恢复

12月6日任务 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复 13.4 mysql用户管理 grant all on *.* to 'user1' identified by 'passwd'; grant SELECT,UPDATE,INSERT on db......

zgxlinux
11分钟前
1
0
Spring异常之Druid – unregister mbean error

Spring异常之Druid – unregister mbean error 2017年04月19日 12:13:42 Dr.Zhu 阅读数:6688 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zt_fucker/arti...

linjin200
17分钟前
1
0
微信小程序webview问题

今天在改小程序的时候在使用webview的时候切换webview的地址行为,出现了诡异的情况。 默认querystring里会有多个?符号,使用的时候被微信给截取了,导致程序找不到改页面。 而且querystri...

钟元OSS
20分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部