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.生成散点图,直 ...
随机推荐
- php,blade语法
打印数组 <?php print_r($agreement);die?> <?= ?><?php echo ?><?php printf();die;?> ...
- windows安装python问题
在安装python过程中,直接下一步,安装好了,配置环境变量的时候如果找不到安装路径在哪,打开开始菜单,在左边的程序栏找到: 这样就找到了,然后在系统变量中加入即可.如果找不到的话,以联想电脑为例一般 ...
- WPF文字排列方式解析zz
WPF文字的处理是一个比较基础的技能.在使用WPF开发工具时,对于各种文字的处理时经常会遇到的情况.希望大家可以通过实践经验的积累,牢固掌握这一方面知识. AD:WOT2014:用户标签系统与用户 ...
- ural 2070. Interesting Numbers
2070. Interesting Numbers Time limit: 2.0 secondMemory limit: 64 MB Nikolay and Asya investigate int ...
- BZOJ4356 : Ceoi2014 Wall
求出左上角到每个需要保护的点左上角的最短路树,那么最优解一定圈住了它们. 然后将每个点拆成四个点,四个点之间如果没跨越最短路树的树边,那就连0权边. 每个需要保护的点四周4个点都不可通行,求出最短路即 ...
- 建立php开发环境(XAMPP + Xdebug+Zend Studio)
1. 安装XAMPP和Zend Studio Zend Studio下载地址: http://pan.baidu.com/s/1o6BjvAE XAMPP 下载地址: http://pan.baidu ...
- mysql 连接超时解决
修改my.cnf文件即可. ************************************ 在/etc/my.cnf下添加如下两行代码: wait_timeout=31536000inter ...
- webpack入门教程
注:本文内容比较基础,供初学者快速入门参考. 更多详细信息请参考官方文档. 本文同步发布于我的博客,欢迎关注^_^ 1. 安装 npm install -g webpack 2. 基本使用 假设项目文 ...
- js/jQuery判断浏览器名称、内核版本、浏览器壳
1.js方法 /* 判断浏览器名称和版本 目前只能判断:ie/firefox/chrome/opera/safari 2012年5月16日23:47:08 浏览器内核UA:UA; 浏览器内核名称:NV ...
- 消除ListView, gridview中的选项单击是的默认黄色底色
要消除其默认的单击底色,只需要在**View定义时为其添加 android:cacheColorHint="#00000000" android:listSelector=&quo ...