【C语言】指针和一维数组的关系_类型变量 指针和一维数组的关系



一、指针和一维数组

1.一维数组名

  • 一维数组名是个​​指针常量​​,存放的是一维数组第一个元素的地址
int a[5];
int b[5];

a = b; //error,常量之间无法赋值

printf("%#X\n",&a[0]);
printf("%#X\n",a); //二者相同


2.下标和指针的关系

确定一个一维数组需要2个参数

​数组名​​和​​数组长度​

  • 如果p是个指针变量,则​​p[i]​永远等价于​*(p+i)​
#include  <stdio.h>

//f函数可以输出任何一个一维数组的内容
void f(int * pArr,int len) // a是 int* 类型,所以pArr也要为 int* 类型
{
for(i=0;i<len,i++)
printf("%d",*(pArr+i)); //*(pArr+i)为第i+1个元素,等价于pArr[i]
print("\n");
} /*如果p是个指针变量,则p[i]永远等价于(p+i)*/

int main(void)
{
int a[5] = {1,2,3,4,5};
int b[6] = {-1,-2,-3,4,5,-6};
int c[100] = {1,99,22,33};

f(a,5); // a是 int*类型
f(b,6);

return 0;
}
#include <stdio.h>

void f(int * pArr,int len)
{
pArr[3] = 88; //p[i]永远等价于*(p+i)
}

int main(void)
{
int a[6] = {1,2,3,4,5,6};

printf("%d\n",a[3]); //4
f(a,6);
printf("%d\n",a[3]); //88,p[i]永远等价于*(p+i)

return 0;
}


3.指针变量的运算

  • 指针变量不能想加,不能相乘,也不能相除
  • 如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减,表示二者之间的元素的个数
#include <stdio.h>

int main(void)
{
int i = 5;
int j = 10;
int * p = &i;
int * p = &j; // p-q,error,没有实际意义

int a[5];
p = &a[1];
q = &a[4];
printf("p和q所指向的单元相隔%d个单元\n",q-p);

return 0;
}


4.一个指针变量到底占几个自节

预备知识:

​ ​​sizeof(数据类型)​

​ 功能:返回值就是该数据类型所占的字节

​ ​​sizeof(数据名)​

​ 功能:返回值就是该变量所占的字节

​ 例:​​sizeof(int)=4​

  • p指向​​char(1Byte)​​类型变量
  • p指向​​int(4Byte)​​类型变量
  • p指向​​double(8Byte)​​类型变量
#include <stdio.h>

int main(void)
{
char ch = 'A';
int i = 99;
double x = 66.6;
char * p = &ch;
int * q = &i;
double * r = &x;

printf("%d %d %d\n",sizeof(p),sizeof(q),sizeof(r));
//4,4,4,和编译器有关
return 0;
}


  • 结论:
    一个指针变量,无论指向的变量占几个字节,该指针变量本身所占字节数一样大,且和编译器有关。


------------------------------------------------------------------------------------------------------------

本文作者:ZyNu11​

------------------------------------------------------------------------------------------------------------