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]

注意:在实际应用中,对于指针数组,我们经常这样使用:

1 typedef int* pInt;
2 pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

代码演示如下:

 1 include <stdio.h>
 2
 3 int main()
 4 {
 5 int c[4]={1,2,3,4};
 6 int *a[4]; //指针数组
 7 int (*b)[4]; //数组指针
 8 b=&c;
 9 //将数组c中元素赋给数组a
10 for(int i=0;i<4;i++)
11 {
12 a[i]=&c[i];
13 }
14 //输出看下结果
15 printf("%d",a[1])l; //输出2就对
16 printf("%d",(*b)[2]); //输出3就对
17 return 0;
18 }

参考文献:

1.指针数组和数组指针的区别

2.从零开始学编程---第一步-C语言

时间: 2024-08-30 04:39:54

Empire C:Basic 3的相关文章

Empire C:Basic 2

作为人与计算机沟通的媒介,C语言给我们呈现了:printf.scanf.以及缓冲区. 1.printf("%d",a) %d:d是decimal base(十进制)的开头字母,意思就是按十进制格式输出,也就是按整数格式输出. %f:按浮点数格式输出,float 定义的变量小数(浮点数)默认小数点后面保留6位数,那怎么让它输出1.1?只让让%f变成%.1f就可以了,反之你想让它输出小数点后两位数就%.2f,三位就%.3f,以此类推. %c:按字符格式输出. 2.scanf("%

Empire C:Basic 1

首先,从一个C程序开始: 这是最简单的一个C语言程序,也是C语言程序组成的基本结构: 1 /* 2 **********************************交错和******************************************* 3 ****************************by JA/C 2015-1-22************************************ 4 */ 5 6 #include <stdio.h> 7 8 ma

Empire C:Basic 4

一.变量名 1.名字由字母和数字组成,但其第一个字符必须为字母. 2.变量名不要以下划线开头. 3.变量名使用小写字母,符号常量名全部使用大写字母. 二.数据类型及长度 1.char 字符型 占用一个字节 2.int 整型 通常反映所有机器中整数的最自然长度 3.float 单精度浮点型 4.double 双精度浮点型 三.常量 枚举是一个常量整型值的列表 四.声明 变量类型+变量 五.运算符 1.算术运算符 2.关系运算符 3.逻辑运算符 4.自增自减运算符 5.按位运算符 6.赋值运算符 六

HTTP认证模式:Basic & Digest

一. Basic 认证 客户端以" : "连接用户名和密码后,再经BASE64加密通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文.可见Basic认证过程简单,安全性也低,存在泄露个人账号信息以及其他诸多安全问题.以下仅为原理演示,不代表真实情况: 客户端向服务器请求数据: GET / HTTP/1.1Host: www.myrealm.com 服务端向客户端发送验证请求401: HTTP/1.1 401 UnauthorisedServer

Multi Paxos:Basic Paxos的进化

Multi Paxos基于Basic Paxos,将原来2-Phase过程简化为了1-Phase,从而加快了提交速度.Multi Paxos要求在各个Proposer中有唯一的Leader,并由这个Leader唯一地提交value给各Acceptor进行表决,在系统中仅有一个Leader进行value提交的情况下,Prepare的过程就可以被跳过,而Leader的选举则可以由Paxos Lease来完成. 实际上,Multi Paxos并不是完全跳过了Phase-1,当系统中选举出一个新的Lea

C#进阶系列——WebApi 身份认证解决方案:Basic基础认证

前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想想都恐怖.经过一番折腾,总算是加上了接口的身份认证,在此记录下,也给需要做身份认证的园友们提供参考. WebApi系列文章 C#进阶系列--WebApi接口测试工具:WebApiTestClient C#进阶系列--WebApi 跨域问题解决方案:CORS C#进阶系列--WebApi身份认证解决方

LeetCode OJ:Basic Calculator(基础计算器)

Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces . You may assume that the given expression is

简洁好用的jquery 焦点图插件:Basic jQuery Slider

官网地址:http://www.basic-slider.com/ <!doctype html> <html> <head> <meta charset="utf-8"> <title>Basic jQuery Slider</title> <link rel="stylesheet" href="bjqs.css"> <!-- load jQuery a

WEB认证模式:Basic &amp; Digest

一. HTTP Basic 客户端以" : "连接用户名和密码后,再经BASE64加密通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文.可见Basic认证过程简单,安全性也低,存在泄露个人账号信息以及其他诸多安全问题.以下仅为原理演示,不代表真实情况: 客户端向服务器请求数据: GET / HTTP/1.1Host: www.myrealm.com 服务端向客户端发送验证请求401: HTTP/1.1 401 UnauthorisedServ