(旧)子数涵数·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了吧. 这个项目前段时间,我还抢救过一次,后来还是放弃了. 先行.网页制作的流程分为哪些呢? 一.网站策划(当时, ...
随机推荐
- sudo 使用不了, the permissions on the /etc/sudoers file are changed to something other than 0440
sudo 使用不了,报错: the permissions on the /etc/sudoers file are changed to something other than 0440 how ...
- 整理PHP_YII环境安装遇到的一些问题
安装yii遇到的一些问题 操作环境 一.Permissiondenied问题 在终端执行如下命令(注意因为是本地测试环境不需要考虑太多权限问题,如果正式环境请慎重) sudo chmod -R o+r ...
- C primer plus 练习题 第七章
1. #include <stdio.h> #define SPACE ' ' #define NEWLINE '\n' int main() { int spaces,newlines, ...
- cmd窗口编码方式的修改
cmd默认的编码是采用GBK regedit HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage 十进制:936 GB ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- 六款值得推荐的android(安卓)开源框架
1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduli ...
- hbase 使用
hbase shell命令的使用 再使用hbase 命令之前先检查一下hbase是否运行正常 hadoop@Master:/usr/hbase/bin$ jps HMaster NameNode Se ...
- Android应用安全之Android APP通用型拒绝服务漏洞
0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞.该通用型本地拒绝服务可以造成大面积的app拒绝服务. 针对序列化对象而出现的拒绝服务主要是由于应 ...
- [引用]SQLServer占CPU100%
程序猿是如何解决SQLServer占CPU100%的 文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 ...
- Java知多少(109)数据库更新
数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...