首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。