(旧)子数涵数·C语言——指针
一、什么是指针?
指针在百度的解释:是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。
也就是说,指针是用于指向某一内存单元。
简而化之,指针便是地址。
二、声明指针
1.方法:数据类型 *名称 初始化
2.例如:
int *p=&a //其中int是数据类型,p是指针变量的名称,=&a是对指针变量p的初始化
3.注意:指针声明完一定要初始化,否则就会变成野指针(没有指向的目标);而且指针初始化时只能指向地址,不能指向数据(在*与&中会讲到)。
三、使用指针
指针也是一种变量,对于指针的使用方法和对其他变量的用法一致。
野指针和空指针不同,如果对野指针进行使用,程序将会报错。
四、*和&
1.*:有两个作用,一是在声明变量是,用来标识这个变量是指针变量;二是在其他地方作用于指针时,*代表取值,即*p就取指针p所指向的值。
(*在是声明时,作声明符,是一种作用;在其他地方作用于指针时,做单目运算符,又是另一种作用;还有一种情况,*表示双目运算符,即为乘积的意思,如5*5=25)
2.&:是取地址运算符,例如&a,就是变量a的地址。
五、一个案例看懂指针
#include<stdio.h>
int main(void)
{
int a=; //声明一个变量a,它的值为10
int *p=&a; //声明一个指针变量p,它的值为变量a的地址
printf("a的值为%d\n",a); //输出a
printf("a的值为%d\n",*p); //输出p所指向的值
printf("a的地址为%d\n",p); //输出a的地址
printf("a的地址为%d\n",&a); //输出p的值
return ;
}
六、空指针
1.作用:声明一个指针后,如果暂不使用,可以先给它赋值为NULL,避免其成为野指针。
2.方法:指针名=(数据类型*)malloc(你分配的内存大小)
3.例如:
int *p;
p=(int*)malloc(4);//分配动态内存
4.注意:malloc的数据类型要和指针的数据类型一致;
内存分配后,习惯上都会进行判断是否分配成功,不成功则退出程序;
内存分配使用完之后一定要释放掉,free是释放函数,所以malloc和free必须是成对出现的。
5.案例:
#include<stdio.h>
#include<stdlib.h> //malloc函数和free函数存储在stdiib.h这个函数库里
int main(void)
{
int *p;
p=(int*)malloc();//分配动态内存
if(p==NULL)
{
printf("内存分配失败。\n");
exit(-);//退出
}
*p=;
printf("p指针中的内容=%d\n",*p);
free(p);//内存释放
return ;
}
七、双级指针
双级指针就是指向指针的指针,即:
int*p1=&a; //指针p1指向a的地址
int*p2=p1; //指针p2指向p1
例如:
#include<stdio.h>
int main(void)
{
int a=;
int *p1=&a;
int *p2=p1;
printf("%d\n",*p2); //输出指针p2所指向的指针p1所指向的变量a的值
return ;
}
八、番外
注意看上一个案例,如果我们把p=(int*)malloc(4)改为2,就会报错,如下图(这被称为内存越界)。
这是为什么呢,这就关乎到数据长度的问题了,因为在VC6.0出生时,系统和CPU发展到32位,所以VC6.0是32位的编译器,在VC6.0中,int的数据长度为32/8=4字节;
而TC2.0出生时,系统和CPU还停留在16位,所以TC2.0是16位的编译器,在TC2.0中,int的数据长度为16/8=2字节。
(旧)子数涵数·C语言——指针的更多相关文章
- (旧)子数涵数·C语言——hello world
一说起hello world想必你们就知道我要干什么了,毕竟hello world基本是每个高级语言的第一个案例. 好,切入正题,我们开始用C语言编写hello world! 一.打开C语言的IDE( ...
- (旧)子数涵数·C语言——条件语句
首先,我们讲一下理论知识,在编程中有三种结构,分别是顺序结构.条件结构.循环结构,如果用流程图来表示的话就是: 那么在C语言中,如何灵活运用这三种结构呢?这就需要用到控制语句了. 而条件语句便是控制语 ...
- (旧)子数涵数·C语言——让C帮你做计算
之前,我们学过了我们的第一个C程序--hello World.现在开始进一步学习,想一想如何让C帮你做计算. 我们先来看代码(我没有新建,还是用之前的hello world.cpp): 好,因为之前在 ...
- 子数涵数·C语言——循环语句
之前,我们讲过了编程中的三种结构(顺序.条件.循环),现在我们来看一下循环语句如何编写. 一.while循环语句(先判断后执行) 1 #include<stdio.h> 2 int m ...
- (旧)子数涵数·Flash——初识ActionScript
一.什么是AS(ActionScript) ActionScript,简称AS,中译为"动作脚本语言". 用于在Flash上实现一些光用Flash无法实现的功能. 在Flash界面 ...
- (旧)子数涵数·PS ——翻页效果
一.首先在网络上下载一张图片,作为素材.这是我下载的素材,至于为什么选择这张照片呢,当然不是因为自己的一些羞羞的念头啦. 二.打开Photoshop,我使用的版本是CS3(因为CS3所占的磁盘空间较小 ...
- (旧)子数涵数·PS——文字人物
首先我们来看一下我用到的素材(在百度图库里下载的). 一.打开PS,在PS中打开素材. 二.复制一个图层(好习惯不解释). 三.图像->调整->阈值,或者按下图示按钮后选择阈值,弹出阈值窗 ...
- (旧)子数涵数·Flash——影片剪辑的其他操作
一.复制影片剪辑 1.方法:duplicatemovieClip(影片实名,新实名,深度级别) 2.解释:影片实名就是你要复制的对象,新实名就是你要粘贴的对象,深度级别就是粘贴后的影片剪辑的堆叠顺序( ...
- (旧)子数涵数·DW——网页制作的流程
PS:这是我很早以前的一个废掉的项目. 当时用的还是table排版,现在基本都是div了吧. 这个项目前段时间,我还抢救过一次,后来还是放弃了. 先行.网页制作的流程分为哪些呢? 一.网站策划(当时, ...
随机推荐
- 我也要学iOS逆向工程--函数
大家好,这篇我开始学习函数了.先学 C 函数,然后再 OC 的吧.OC 应该复杂点的吧. 然后看看汇编情况哦! 学习函数呢,肯定要弄清楚几个事情. 1.跳转地址. 2.返回地址 3.参数 4.函数获取 ...
- c# 垮线程调用控件
http://www.cnblogs.com/TankXiao/p/3348292.html
- Java Web 工作技巧总结 16.8
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人. 1. AOP – LOG项目中,一个请 ...
- SQL语句转摘
http://www.cnblogs.com/Olive116/p/3271706.html 收藏没有用,来收到留链接
- nn_slow和nn_fast
#define nn_fast(x) __builtin_expect ((x), 1) #define nn_slow(x) __builtin_expect ((x), 0) __builtin_ ...
- [翻译]使用Swift在Xcode中创建自定义控件
使用Swift在Xcode中创建自定义控件 原文 IBDesignable and IBInspectable With IBDesignable and IBInspectable, develop ...
- asp.net添加验证码
1.新建一个aspx页面生成验证码图像 using System; using System.Data; using System.Configuration; using System.Collec ...
- sublime3+wamp配置php,(无需配环境变量)
思来想去,最后还是决定给自己的手游加简单后端验证.好久没搞php了,最近搜了搜资料,发现现在php比几年前方便简单的多,有wampserver和sublime用.想想当年我还用记事本+phnow呢. ...
- Socket模型详解(转)
两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待 ...
- Quiz(贪心,快速幂乘)
C. Quiz time limit per test 1 second memory limit per test 256 megabytes input standard input output ...