文档章节

我的C语言入门到精通之路 day06

生命奇迹泉
 生命奇迹泉
发布于 2016/04/20 15:43
字数 1478
阅读 10
收藏 0
1.不是同一个类型,指针不能随随便便赋值。指针类型和指针指向变量类型必须一致。
2.不论是何种类型的指针,都占据4个内存字节(这是由32位地址数据决定的)。如果是64位操作系统,指针就是8个字节。
3.原则上说,指针类型和指针所指向的类型应当是相同的,但也有例外,讨论之前,区分下两个概念,
所谓指针类型,指的是声明指针变量时位于变量名前的“类型*”,而所谓指针所指向的类型,
指的是为指针初始化或赋值的变量类型。
理解两个类型的不同是掌握C语言指针关键所在,本节从以下2个方面讲述,
让大家体会两者的不同:
指针的类型和指针所指向的类型相同时,指针的赋值。
指针的类型和指针所指向的类型不同时,指针的赋值。4.一个指针的值是A,即是说该指针指向了以A为首地址的一片内存区域;反之,说一个指针指向了某内存区域,即是说该指针的值是这块内存区域的首地址。5.指针变量的值决定了地址从哪里开始,指针变量的类型决定了数据解析方式


指针运算


1.若有p=a(p指向数组a),则:
p++(或p+=1),表示p指向下一元素。
*p++与*(p++)等价。同样优先级,结合方向为自右向左。


*(p++) 与*(++p)。

前者是先取*p的值,后使p值加1,相当于a[i++];后者是先使p加1,再取*p,相当于a[++i]。
(*p)++表示p所指向的元素值加1,
而非指针值加1。
2.指针变量所支持的另一种运算方式是两个同类型指针相减,返回值是个有符号整数


举例来说,指针p1指向sz[i],指针p2指向sz[j],那么p1-p2=i-j,两个指针的距离并不是其值简单做差,还要除以“指针所指类型占用的内存字节数”。
指针相减多应用于同一块内存(如数组,或一块动态申请的内存)中,如果两个指针所指向的元素没有结构上的关系,指针相减的结果将是不可预测的,打个比方来说,对一条街上的两个门牌,相减大致可以判断出中间隔了多少间房子,而在不同街道甚至是不同城市的门牌作差,是没有什么实际意义的。
3.数组名是表示数组首地址的地址常量
注意:数组名a不代表整个数组,只代表数组首元素的地址。
“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p”,
而不是“把数组a各元素的值赋给p”。
4.a[0]代表a[0][0]的地址
a[0]+1代表a[0][1]的地址
a[0]+2代表a[0][2]的地址
a[0]+3代表a[0][3]的地址5.输出二维数组任一行任一列元素的值。#include <stdio.h>
int main()
{int a[3][4]={1,3,5,7,9,11,13,15,
                                   17,19,21,23}; 
  int (*p)[4],i,j; 
  p=a; 
  printf(“enter row and colum:");
  scanf(“%d,%d”,&i,&j); 
  printf(“a[%d,%d]=%d\n”,
                             i,j,*(*(p+i)+j));
  return 0;
}


#include <stdio.h>
int main()
{
int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 };
int(*p)[4], i, j;
p = a;
printf("enter row and colum:");
scanf("%d, %d", &i, &j);
printf("a[%d, %d] = %d\n",i, j, *(*(p + i) + j));
return 0;
}


*(*(p + i) + j))和p[i][j]是等价的


数组作为函数的参数
1.用指向数组的指针作函数参数
一维数组名可以作为函数参数,多维数组名也可作函数参数。
用指针变量作形参,以接受实参数组名传递来的地址。
可以有两种方法:
①一维数组用指向变量的指针变量
②二维数组用指向一维数组的指针变量。实参数组名是指针常量,但形参数组名是按指针变量处理
在函数调用进行虚实结合后,它的值就是实参数组首元素的地址
在函数执行期间,形参数组可以再被赋值
void fun (arr[ ],int n)
{ printf(″%d\n″, *arr); 
   arr=arr+3;                
   printf(″%d\n″, *arr);  
}
函数指针
1.如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这个函数的指针。
2.可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:
      int (*p)(int,int);
   定义p是指向函数的指针变量,它可以指向类型为整型且有两个整型参数的函数。p的类型用int (*)(int,int)表示3.定义指向函数的指针变量的一般形式为 
数据类型 (*指针变量名)(函数参数表列);
    如 int (*p)(int,int);
    p=max;   对
    p=max(a,b); 错
    p+n,p++,p--等运算无意义



4.指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数
指向函数的指针可以作为函数参数,把函数的入口地址传递给形参,这样就能够在被调用的函数中使用实参函数



5.定义返回指针值的函数的一般形式为
    类型名 *函数名(参数表列);用随机数生成一个数组,写一个函数查找最小的数,并返回最小数的地址。在主函数中打印出来最小数。



















本文转载自:http://blog.csdn.net/shengmingqijiquan/article/details/47281739

生命奇迹泉
粉丝 1
博文 42
码字总数 0
作品 0
海淀
程序员
私信 提问
C语言的大门,从入门到精通,你能想象它的距离有多大吗?

C语言作为一种编程语言,它的发展可谓历经千辛万苦。我们总是在说,程序员所做的就是天天敲代码,但是单单敲代码可是永远也学不会C语言的更深一层的所蕴含的知识。 零基础小白到大神之路,欢...

诸葛玥
2018/03/16
0
0
C语言编程的大门,从入门到精通,你能想象它的距离有多大吗?

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/03/19
0
0
「C语言入门到精通」C语言简介第01课

「C语言入门到精通」C语言简介第01课 学习资料,直播课程,群专业解答老师,群文件免费源码 C/C++9群 99816772 主要内容: 【C语言入门到精通】C语言简介第01课 主要内容: 1.C语言最简单的框...

这个人很懒什么都没留下
2017/11/11
0
0
本人现在自学Java,正在往Android转。每天生活在地狱当中,很多问题让我不知所措。

@马丁当 你好,想跟你请教个问题: 我学程序,主要是两个因素,一:我刚毕业,处于实习期间,然后不知道找什么工作。二:我的叔叔也是做程序员的,做了几十年。家里人觉得这行有出息,叫我来...

程序伐木累
2016/09/11
6.2K
56
一些Linux相关的技术电子书

推荐书籍: 《Linux:鸟哥私房菜》1700页全文清晰版 《高性能Linux服务器构建实战》电子版 Linux on Power 技术及案例分享 《精通Linux网络服务器配置·管理·检测·应用》 《循序渐进Linux...

小骏骏
2015/09/09
60
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
33分钟前
5
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
36分钟前
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
4
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
8
0
前端技术之:webpack热模块替换(HMR)

第一步:安装HMR中间件: npm install --save-dev webpack-hot-middleware 第二步:webpack配置中引入webpack对象 const webpack = require('webpack’); 第三步:增加devServer配置项: ho......

popgis
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部