C语言数组和指针

一,C语言的数组

1.什么是数组
数组是存储数据的结构。由于单个变量所能存储的数据很有限,所以有了数组存储结构。不仅如此,数组和指针是相辅相成的,学习数组可以为学习指针打下基础。
2.数组的定义方式
2.1一维数组
(1)通常一维数组的定义方法为:
类型说明符 数组名[常量表达式];
例如:

int a[5];

(2)它表示定义了一个整型数组,数组名为 a,定义的数组称为数组 a。数组名 a 除了表示该数组之外,还表示该数组的首地址;此时数组 a 中有 5 个元素,每个元素都是 int 型变量,而且它们在内存中的地址是连续分配的。也就是说,int 型变量占 4 字节的内存空间,那么 5 个int型变量就占 20 字节的内存空间,而且它们的地址是连续分配的。
2.2、一维数组初始化
(1)完全初始化
给数组里的元素全部赋值。
例如:

int a[5] = {1, 2, 3, 4, 5};

(2)不完全初始化
给数组里的部分元素赋值。

int a[5] = {1, 2};

(3)如果定义时就已经给全部数组元素赋了初值,那么你可以不用定义数组长度,因为元素的个数已经确定了。这样既方便也不会报错。

int a[] = {1, 2, 3, 4, 5};

2.3、一维数组元素的引用
C 语言规定,只能逐个引用数组元素,而不能一次引用整个数组。前面讲过,数组元素的表示形式为:数组名[下标]
下标可以是整型常量或整型表达式,比如:
a[0] = a[5] + a[7] - a[2 * 3]
例如“int a[5];”是定义了有 5 个元素的数组,这 5 个元素分别为 a[0]、a[1]、a[2]、a[3]、a[4]。而 t=a[3] 中的 a[3] 不是数组,只是其中的元素 a[3]。

二,c语言的指针

1.什么是指针
指针就是地址。
2.指针变量的定义
首先要区分指针与指针变量:指针是地址,而指针变量是用来存放这个地址的变量。
指针变量定义的一般形式:基本数据类型 + ’ * ’ + 变量名。
3.指针变量的初始化

int i = 3, *j; j = &i;
int i = 3; int *j = &i; //*j表示定义了一个指针变量j, 并将变量i的地址赋给它

4.指针的运算
指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算
(1)值运算:直接通过运算方式,像a+(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};
int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。
例如:

int nums[5]={0,1,2,3,4};
int *a=nums;
a=a+2;
printf("%d\n",*a);
结果输出2

三,指针和数组

(1)指针引用数组

int main(void)
{
    int a[] = {1, 2, 3, 4, 5};
    int *p = &a[0];
    int *q = a;
    printf("*p = %d, *q = %d\n", *p, *q);
    return 0;
}

上述程序中p与 q的值是相同的,这就表明p = &a[0]与q = a是等价的。
(2)不同指针类型的大小

int main(void)
{
    int    *a = NULL;
    float  *b = NULL;
    double *c = NULL;
    char   *d = NULL;
    printf("%d %d %d %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));
    return 0;
}

运行结果:4,4,4,4
总结:可见,不管是什么基类型,系统给指针变量分配的内存空间都是 4 字节。在 C 语言中,只要是指针变量,在内存中所占的字节数都是 4。指针变量的“基类型”仅用来指定该指针变量可以指向的变量类型,并没有其他意思。不管基类型是什么类型的指针变量,它仍然是指针变量,所以仍然占 4 字节。

你可能感兴趣的:(基础系列,c语言,数组)