栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

通俗易懂C语言--指针与数组(第二小节)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通俗易懂C语言--指针与数组(第二小节)

搭配VC++学习效果更佳

 知识补充

在学习指针和数组之前,先了解一个概念,int/short/long/char在机器中占用了几个字节,Windows系统中,int占用4个字节,short占用2个字节,char占用1个字节,这几个在Linux系统中占用的字节是一样的,不过对于long来说,windows系统中占用4个字节,linux系统64位会占用8个字节,而long long都是一样的,也占用8个字节,所以对于8字节来说,统一用long long。

在进行UEFI代码编程的时候,通常只会出现UINTN/UINT8/CHAR16...等等定义,通过上述说明,就能理解这些定义的逻辑了

  typedef unsigned long long  UINT64;
  typedef long long           INT64;
  typedef unsigned int        UINT32;
  typedef int                 INT32;
  typedef unsigned short      UINT16;
  typedef unsigned short      CHAR16;
  typedef short               INT16;
  typedef unsigned char       BOOLEAN;
  typedef unsigned char       UINT8;
  typedef char                CHAR8;
  typedef signed char         INT8;
指针与整型数组

先看一段代码:

int main() {
	 int *p;
	 int num[2] = {1, 3};
	 p=&num[0];
     printf("%dn", *p);
    return 0;    
}

通过之前的阐述,很好理解,*p=1,另外赋值也不能写成p=&1,当p=&num[0]的时候,这个指针其实就已经和数组关联起来了,计算一下下面几个值等于多少;

p=&num[0];
*p+1=
*(p+1)=
p[0]=

第一个,*p+1什么意思,就是*p和1相加,*p=1,理所当然,*p+1=2;*(p+1)呢,其实是p这个地址加1,假如p=1024,那么p+1=1025吗?错,p+1=1028,因为int占用4个字节,加1是加一个单位,在原地址的基础上需要加4,正好,整型数组元素1的地址规定了是1024,那元素3的地址是多少呢?1028,显然,*(p+1)=3,最后一个p[0]呢,*p=p[0];*(p+1)=p[1];所以,p[0]=1,理解了这些,接下来就可以进行深入理解指针与字符数组了。

指针与字符数组
#include 

int main() {
	char name[] = "hello anthony";
	char *old = "how old are you";
	char number[15];
	 printf("%cn", name[1]);
     printf("%cn", old[0]);
    return 0;    
}

同样的,如上的代码,定义两种不同表达的字符串,第一个字符数组,第二个,字符指针,初始赋值把一个字符串赋给了这个指针,按照之前说明的,很容易能知道输出的值是什么,分别是e和h,那为什么其中还定义了一个字符数组number,但是没用呢,其实我们还可以定义一个指针比如:char *p=number;然后把"how old are you"放进去,当然也可以直接使用number这个字符数组,这几种情况在平时用就差不多了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429518.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号