C语言高速入口系列(七)
C语言高速入口系列(七)
C语言指针进阶
本章引言:
在前面第5节中我们对C语言的指针进行了初步的学习理解;作为C语言的灵魂,
C指针肯定没那么简单,在这一节中,我们将会对指针进行进一步的学习,比方二级指针,
指针数组,内存分配和const修饰指针常量等!以下就请大家尾随笔者的脚步,对
C指针神奇的一面进行进一步的解析吧!
本节学习路线图:
函数与指针:
①指针作为函数的形參:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
②指向函数的指针:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
③指针函数:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
④带參数的主函数
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
ps:该代码的执行:先要编译生成exe文件后,来到exe所在文件文件夹下:输入: 文件名称 one two three
会输出:one two three
指针数组:
两个问题:怎样保存一个字符串?假设保存的不止一个,而是多个呢?
第一个问题:
①char name[20] = "~~~" ②char *name = "~~~" //前者定义了长度,不能直接赋值,明显后者比較灵活
第二个问题:见图
二级指针:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29kZXJfcGln/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
内存的动态分配:
代码演示样例:
动态分配10个整型的空间大小,假设大于这个数目则动态分配,否则利用realloc又一次分配内存
ps:代码没问题,vc6一直报执行时错误,假设出错了,用C-Free或者Visual studio等编译器试试!
<span style="font-family:Microsoft YaHei;">#include <stdio.h>
#include <stdlib.h>
#define N 10 int main()
{
int *p = 0;
int i,num,*q = 0;
p = (int *)malloc((N * sizeof(int)));
if(p == 0)
{
printf("内存分配错误!\n");
exit(0);
}
printf("请输入要存储的元素个数:\n");
scanf("%d",&num);
if(num <= N)
{
for(i = 0;i < N;i++)
scanf("%d",p+i);
}
else
{
for(i = 0;i < num;i++)
q = (int *)realloc(p,(N + N)*sizeof(int));
if(q == 0)exit(0);
for(i = 0;i < num;i++)
scanf("%d",q + i);
p = q;
}
for(i = 0;i < num;i++)
printf("%3d",*(p+i)); printf("\n");
free(p);
return 0;
}</span>
使用const修饰指针变量
我们都知道使用const修饰一个基本数据类型的变量,能够让变量存储的值从头到尾都不变
我们的程序不能进行改动!
只是修饰指针变量就有点差异了:
比方:
int a = 3,b = 4; const int *p = &a;
假设我们再加入一句代码: p = &b;的话就会报错
假设加入: a = 5;代码并不出错,此时 *p == a == 5;
分析结果:
使用const修饰指针时,表明该指针是一个常量指针,它所指向的变量的值是能够改动的;
可是改动指针指向的地址则是错误的。!
!
在C很多的标准库函数都将某些指针參数的类型前加上const,目的是保护參数!
ps:int *const p = &a; const int * const p = &a; 和上面的都是等价的!
本章小结:
①函数与指针:
1.指针作为函数的形參: 指针參数相应的实參须要为变量地址
2.指向函数的指针:函数的首地址称为函数的指针,通过函数名能够找到而且运行函数
3.指针函数:返回值类型是一个指针
4.带參数的主函数: int main(int argc,char *argv[]) :形參依次为:记录參数个数和存储參数内容的字符串数组
②指针数组
二维数组存放字符串与指针数组存放字符串的比較
③二级指针
指向指针变量的指针
④内存的动态分配:
1.内存分配图
2.C语言提供的四个内存分配函数的使用:malloc(),calloc(),realloc(),free()的使用
⑤使用const修饰指针变量
能够改动的指向地址的变量的值,不能改动的是指针所指向的地址!
版权声明:本文博主原创文章。博客,未经同意不得转载。
C语言高速入口系列(七)的更多相关文章
- C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- C语言高速入门系列(八)
C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...
- C语言高速入门系列(四)
C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...
- C语言高速入门系列(一)
C语言高速入门系列(一) 本系列引言: 本教程的宗旨是将C语言入门的内容进行关键知识点的提纯,将一些笼统的废话去除; 再进行压缩,然后将本章的关键知识点做成路线图的,能够更加方便地掌握学习的方向; ...
- C语言高速入门系列(五)
C语言高速入门系列(五) C语言指针初涉 ------转载请注明出处:coder-pig 本节引言: 上一节我们对C ...
- SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现
原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...
- Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- WCF编程系列(七)信道及信道工厂
WCF编程系列(七)信道及信道工厂 信道及信道栈 前面已经提及过,WCF中客户端与服务端的交互都是通过消息来进行的.消息从客户端传送到服务端会经过多个处理动作,在WCF编程模型中,这些动作是按层 ...
随机推荐
- redhat6.3 64位更新源(使用网易源)全过程记录
本篇博客参考:http://chinaxiaoyu.diandian.com/post/2013-01-24/40046529897.首先在浏览器中输入http://tel.mirrors.163.c ...
- Alexandra and Prime Numbers(思维)
Alexandra and Prime Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- poj 3216 (最小路径覆盖)
题意:有n个地方,m个任务,每个任务给出地点,开始的时间和完成需要的时间,问最少派多少工人去可以完成所有的任务.给出任意两点直接到达需要的时间,-1代表不能到达. 思路:很明显的最小路径覆盖问题,刚开 ...
- ZOJ1372 POJ 1287 Networking 网络设计 Kruskal算法
题目链接:problemCode=1372">ZOJ1372 POJ 1287 Networking 网络设计 Networking Time Limit: 2 Seconds ...
- 在opensips中记录通话记录
1.为acc表增加额外的字段记录主叫被叫进入mysql,选取opensips的数据库ALTER TABLE acc ADD from_uri VARCHAR(64) DEFAULT '' NOT NU ...
- spring MVC做form提交Neither BindingResult nor plain target object for bean name 'command' available
这两天在做spring3.0 MVC+hibernate3.2的练习中,做简单的form提交, 一直报java.lang.IllegalStateException: Neither BindingR ...
- PreferenceFragment 使用 小结
Perference也就是我们常说的偏好设置,首选项设置,能够自己主动保存一些数据,比如我们在上一次使用的时候的一些内容,则在下一次启动后依旧生效,而不须要再进行配置.当用户改变设置时,系统就会更新S ...
- RMAN备份各种物理文件
RMAN运行脚本的方式:RMAN TARGET / @backup_db.rmanRMAN TARGET / cmdfile=backup_db.rman在RMAN中执行操作系统中保存的脚本:RMAN ...
- 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题
大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...
- js获取昨天日期
刚刚js做项目,遇到需要获取昨天日期的问题,网上找了下答案,感觉网上的答案都不太严谨,自己写了个,凑合能用吧,忘大神们抛砖指教. <script type="text/javascri ...