首页 > 代码库 > C陷阱与缺陷 2

C陷阱与缺陷 2

1,数组

对数组只能进行两种操作,1确定数组的大小,2获得数组第一个元素的指针,其他的操作均是通过指针来实现的。

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int *p,(*q)[3];
    p=a[2];
    q=a;
}

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

a为一个数组(A),数组的维度为3,元素为数组(B),数组(B)的维度为4 元素为int 类型

a[2]为数组(A)的一个元素,为数组(B)的首地址

p=a[2]; 为p指向a[2]的第一个元素的地址,第一个元素为 int 类型,p为指向int 类型的指针,故是相符的

p=a,是不正确的,a为指向数组(B)的指针

q为指向数组(B)的指针,故q=a是正确的。

下标引用和指针之间的关系?

1
2
3
i=a[2][3];
i=*(a[2]+3);
i=*(*(a+2)+3);

根据指针的而不同,吃处+3,地址可能是不同的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
main()
{
char *p ,*q;
int *a;
p=malloc(sizeof(char));
a=malloc(sizeof(int));
printf("%d \n",p);
printf("%d\n",p+1);
 
printf("%d \n",a);
printf("%d \n",a+1);
}


p为指向char 的指针,p+1的地址是+1

q为指向int 的指针,q+1的地址是+4

2 指针

空指针并非空字符串





来自为知笔记(Wiz)