C语言程序设计——指南

小微 科技C语言程序设计——指南已关闭评论123字数 2110阅读模式
摘要我应该比大多数读者年龄都要大一些,所以我就自称”谱哥“,做事靠谱,为人靠谱的意思;针对 C 语言三大核心:数组、指针、函数,今天继续写技术文章。上次 C 语言写到了数组,有些书是先...

我应当比大多数读者春秋都要大一些,所以我就自称”谱哥“,做事靠谱,为人靠谱的意思;针对 C 语言三大核心:数组、指针、函数,今天继续写技术文章。

上次 C 语言写到了数组,有些书是先讲指针,有些书是先讲函数,依照我之前学习 C 语言的顺序,和对 C 语言的理解,学习的顺序是这样的:数组--->指针--->函数,所以本篇文章讲授 C 之指针。文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

C 语言是值得好好学习的一门语言,是一门基础语言,更是我编程入门的语言,其中不少编程思想,至今影响着我,在工作中对我的帮助很大。文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

基本概念

学习 C 语言之指针,必需强烈举荐一本书:《C 以及指针》,好好看,把这本书吃透,C 指针就差不多了。文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

1、文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

指针有两个要素文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

、首地址:内存中多个连续字节的第一个字节的编号;在 32 位系统下,每一个字节的编号都是 32 位二进制,也就是 4B,任何类型的指针都只占 4B 的存储空间。文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

1char *a; char* a;文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

2short *b; short* b;文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

3int *c; int* c;文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

4double *d; double* d;文章源自微观生活(93wg.com)微观生活-https://93wg.com/5186.html

5

6printf, sizeof, sizeof, sizeof);

7//32位系统下,结果为:4 4 4 4,证明了只要是指针,都是 4B,其实指针的值就是内存中一个字节的地址,仅仅是代表了一个编号而已

、指针所指向空间的数据类型:以指针的值为首地址,其所指向的空间的数据类型。

2、

指针类与值类

咱们以前学习过的各种数据类型:int、float 等等都统称为值类。

指针类以及值类不能简单的合用之前所讲述的语法,例如:自动类型转换以及强制类型转换是不合用指针类的。

3、

指针的基本运算

& 以及 *

A、

&:取地址运算符,单目运算符,优先级在单目运算符中比较低,低于 ++、--。

&左值(左值只能是空间、变量),取的是内存的地址。

&常量以及&表达式是语法过错的。

1 &3、&、&&n,都是过错的情势

B、

1short i, j, *p, *q, **r;

2//两个值类变量:i 以及 j;三个指针类变量:p、q、r

3//p、q 是指针变量,其指向的数据类型为:short;

4//r 是指针变量,然而 r 所指的空间的数据类型是 short *

5//对于指针所指向的数据类型:去掉最后一个\"*\",剩余部份与类型所组成的内容就是了

6

7//p = &i; 是正确的,把变量/空间 i 的地址赋值给 p

8//r = &i; 是过错的,必需保证左侧以及右侧的数据类型是同样的,指针才可以进行赋值操作,r 的数据类型是:short **,&i 的数据类型是:short *,所以赋值失败

9//r = &p; 是正确的,r 指向 p,必需首先的明确这些指针的数据类型的对应关系,和指向,指向空间的数据类型

C、

* 运算符

单目运算符,与 & 优先级相同,且以及 & 互为逆运算(连续的两个 & 以及 * 运算符在一块儿,互相抵消),例如:*&n <=> n、&*p <=> p。

语法:*指针(常量、变量、表达式)

1short i, j, *p, *q, **r;

2p = &i;

3q = &j;

4*p = 30; //把 30 赋值给”p 所指向的空间“,也就是 i,等价 i = 30

5*q = *p + 15; //将 p 所指向空间的值,以及 15 乞降,把以及值赋值给 q 所指向的空间,等价 j = i + 15

*某的理解:

、其在左侧,理解为:某所指向的空间;

、其在表达式中,理解为:某所指向的空间的值。

1short i, j, *p, *q, **r;

2p = &i;

3q = &j;

4r = &p;

5*p = **r + *q; //将 r 所指向空间的值所指向空间的值以及 q 所指向空间的值乞降,赋值给 p 所指向的空间,等价 i = i + j;

4、

指针定义的理解

A、

1char i, j, *p = &i, *q = &j, **r = &p;

2//定义语句中的 *,不是指向运算符,它只是指针身份的声明

B、

double *p;

*p = 3.14;

对于上述语句的理解,是相当重要的。

上述语句会引发:运行时致命过错!!!

变量 p 定义为指针变量,占用 4B,然而没有初始化(没有赋初值),其值为垃圾数据;

*p = 3.14; 的意思是:将 3.14 赋值给 p 所指向的空间,也就是将 3.14 赋值给“以 p 的值作为首地址”,该首地址所指向的空间;

综上所述:将 3.14 赋值赐与垃圾值为首地址,所指向的空间,这个空间在哪里,只有鬼知道!这个垃圾值的取值规模在 0 到 40 亿之间,若落在当前软件申请的空间规模内,则息事宁人;否则,这个操作(*p = 3.14;),将对不属于本软件所申请的空间进行操作,被操作系统认为是“非法走访”,操作系统将强行终止这个软件的执行!

5、

指针的其他运算(主要是指针的加减运算)

指针加/减整型值,其结果是一个指针,且指向空间的类型不变。

A、

指针加/减整型

P + 1:所得到的还是指针,将会指向 P 所指向空间的下一个地址(到下一个地址挪动的长度是指向空间数据类型的长度)。

指针 +1 所得到的“字节编号”的值。与指针原值(原字节编号)相差sizeof。

指针 +n 的值与指针原值相差 n 倍的 sizeof

B、

指针减指针 => int 类型

指针减指针,其结果的绝对值是:两指针所指向的空间之间 sizeof 元素的个数。

参加指针相减运算的两个指针,其指向空间的数据类型必需一致!

实质上,指针相减的内部运算进程是:两指针值(字节编号)相减,再除了以 sizeof

指针不能加指针,会呈现语法过错!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/5186.html