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编程模型中,这些动作是按层 ...
随机推荐
- java笔记之静态修饰附和单例设计模式
第六天笔记 静态修饰符static: 一.static修饰成员变量: static用来修饰成员变量叫静态成员变量,没有static修饰的成员变量叫非静态成员变量 静态成员的访问方式: (1) 用 ...
- 怎样在 Swift 项目中使用 CocoaPods
4个步骤,将 CocoaPods 导入 Swift 1.创建.编辑 Podfile 文件并 pod install 2.使用 File -> New -> File- 创建一个 Heade ...
- 基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection)
基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection) kezunhai@gmail.com http://blog.csdn.net/kezunhai 一幅 ...
- 解读JavaScript代码 var ie = !-[1,]
var ie = !-[1,]: 这句代码在IE9之前曾被称为世界上最短的IE判定代码.代码虽短但确包含了不少javascript基础知识在里面.在这个例子中代码执行时会先调用数组的toString( ...
- React-Native之ViewPagerAndroid的使用
刚接触React-Native不久,我就被深深折服了. 前几天做项目用到了ViewPager做广告页,在研究了一番官方文档之后,终于也是大体做出来了,今天就分享给大家吧. 其实,大家如果使用过Andr ...
- PHP学习笔记八【数组】
<?php //定义数组 $hens[0]=3; $hens[1]=5; $hens[2]=1; $hens[3]=3.4; $hens[4]=2; $hens[5]=50; //遍历整个数组 ...
- PHP学习笔记二
<?php //布尔类型 $a=true; //值不区分大小写 $b=false;//整型0,浮点数0.0,空字符串,不包括任何元素的数组,空对象,null都表示false $c=0; if($ ...
- JS 之 innerHTML
定义和用法 innerHTML 属性用于设置或返回指定标签之间的 HTML 内容. 语法 Object.innerHTML = "HTML";// 设置 var html = Ob ...
- Word Search II
Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...
- Building Android Apps 30条建议
Building Android Apps — 30 things that experience made me learn the hard way There are two kinds of ...