通俗易懂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("%d\n", *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 <stdio.h>

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

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

猜你喜欢

转载自blog.csdn.net/u011397314/article/details/121159504
今日推荐