Empire C:Basic 3
首先我们定义一个表示年龄的指针:
int* page; 这就是定义了一个指针,和定义普通变量就多了一个*符号而已。
为什么变量名用了p开头,这里引用了英文pointer(指向),表示它是一个指针,而非普通变量,加不加p都无所谓。
1.*号是取值运算符(间接访问),这里不是乘号的意思
2.*号必须放在指针类型和指针变量中间,摆在哪里无所谓
有3种方式:int* page; int *page; int * page;
第一种是比较正规的写法,第2种是用的最多的,但是最好不要用第3种。
一、明确几个概念:
1.指针也是一种数据类型
int* 这里表示定义了指向int类型变量的指针,并不是说定义了int类型的指针
int* page 这里page是指针变量,它只能存放地址,C语言规定,只有指针类型的变量才能存放地址,不是你随随便便定义一个变量就能存放的。
2.定义指针的时候兼具两个功能
int *page=&age; 不仅获取了age的地址,同时也获取了age变量的值。
3.指针使用之前必须先初始化,指针类型与指针指向类型一致。
4.地址
每个变量都有自己的地址,且都是唯一不重复的,而且地址不一定全都是数字。
5.直接访问和间接访问
- 直接访问:按变量地址存取变量值
- 间接访问:通过存放变量地址的变量去访问变量
二、指针数组&数组指针
1.指针和数组的关系
数组名就是一个指针,即地址
int a[5] 这是一个int类型的数组
它有5个元素,分别为a[0],a[1],a[2],a[3],a[4],这5个都是变量,和普通变量没多大区别
这个数组的名字是a,可别弄成a[5]了
a是一个指针常量(地址无法改变,不能指向其他变量), 它只存储着数组第一个元素的地址,即a[0]的地址
所以我们用scanf()输入字符串的时候不需要&
char a[5]
scanf("%s",a)
为什么只存储着第一个元素的地址,那其他元素怎么办?
C语言中,数组的内存分配是连续的,也就是连在一起的,如果数组第一个元素的地址是1000,那第2个则是1001,所以知道了第一个元素的地址,就可以知道其他元素的地址。
2.指针数组&数组指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:指向数组a的指针
元素表示:(*a)[i]
注意:在实际应用中,对于指针数组,我们经常这样使用:
typedef int* pInt;
pInt a[];
这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。
代码演示如下:
include <stdio.h> int main()
{
int c[]={,,,};
int *a[]; //指针数组
int (*b)[]; //数组指针
b=&c;
//将数组c中元素赋给数组a
for(int i=;i<;i++)
{
a[i]=&c[i];
}
//输出看下结果
printf("%d",a[])l; //输出2就对
printf("%d",(*b)[]); //输出3就对
return ;
}
参考文献:
Empire C:Basic 3的更多相关文章
- Empire C:Basic 2
作为人与计算机沟通的媒介,C语言给我们呈现了:printf.scanf.以及缓冲区. 1.printf("%d",a) %d:d是decimal base(十进制)的开头字母,意思 ...
- Empire C:Basic 1
一.首先,从一个C程序开始: ///Name:Hello World ///Author:JA ///Date:2015-2-4 #include <stdio.h> //包含标准库的信息 ...
- Empire C:Basic 4
一.变量名 1.名字由字母和数字组成,但其第一个字符必须为字母. 2.变量名不要以下划线开头. 3.变量名使用小写字母,符号常量名全部使用大写字母. 二.数据类型及长度 1.char 字符型 占用一个 ...
- C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- #进阶系列——WebApi 身份认证解决方案:Basic基础认证
阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2.Basic基础认证原理 三.Basic基础认证的代码示例 1.登录过程 2./Home/Index主界面 3 ...
- WebApi身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)
http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...
- Demo学习: Basic jQuery
UniGUI是一套基于ExtJS的Delphi的WEB框架,它是使用ExtPascal来转化到ExtJS,ExtJS是一个跨浏览器的JavaScript库,因此UniGUI发布出来的程序可以在各种浏览 ...
- Python Learing(二):Basic Image Processing 1
<写在前面> Basic image processing 1: 0.(以简单的曲线图为例)对于生成的图自定义外观,使用子图,多个数据集,标题,标签,交互式标注,图例: 1.生成散点图,直 ...
随机推荐
- 工具:使用jekyll生成静态网站
在使用前端框架构建网页而不使用后端平台与数据库,即没有服务器的条件下读取文件夹其他文件,浏览器可能会阻止访问.对于这种静态构建可以使用简单的生成工具jekyll.它主要适用于将静态文件生成静态网站,在 ...
- poj1222 EXTENDED LIGHTS OUT 高斯消元||枚举
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8481 Accepted: 5479 Description In an ...
- HDU5737 : Differencia
注意到$b$不变,考虑用归并树来维护这个$b$序列,对于每个节点有序地维护$b$,同时在归并的时候预处理出每个元素在左右儿子里的排名. 在归并树上额外维护区间内$a\geq b$的个数以及赋值标记. ...
- Sqlserver自定义函数Function
一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的: ...
- 用R进行市场调查和消费者感知分析
// // 问题到数据 理解问题 理解客户的问题:谁是客户(某航空公司)?交流,交流,交流! 问题要具体 某航空公司: 乘客体验如何?哪方面需要提高? 类别:比较.描述.聚类,判别还是回归 需要什么样 ...
- Surf特征提取分析
Surf特征提取分析 Surf Hessian SIFT 读"H.Bay, T. Tuytelaars, L. V. Gool, SURF:Speed Up Robust Features[ ...
- BZOJ3468 : 滑雪
根据公式$x^k=\sum_{i=1}^k Stirling2(k,i)i!C(x,i)$, 设$f[i][j][k]$表示从$(i,j)$出发的所有路径的$C(路径长度,k)$的和, 根据$C(n, ...
- FastDFS原理
转自:http://blog.chinaunix.net/uid-20196318-id-4058561.html 开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器 ...
- iOS中为网站添加图标到主屏幕
1 <link rel="apple-touch-icon-precomposed" href="icon.png"/> 2 <link re ...
- 手机web站点和手机app 技术选型的困惑于思考
今年一直在关注移动端技术的发展,自己也用博客园的rss接口玩了半年,关于技术选型的困惑和大家说说 一 趋势 随着手机硬件不断的升级,外加4g牌照的发放,不出2年时间移动端web站点和手机app一定会进 ...