int a(10) c语言,C语言的int (*a)[10]等指针问题理解

C语言里面的指针确实有些难理解,我感觉用文字很难说清楚,直接用代码解释更清楚明白!

编译环境:win7 64位,Dev-C++(MinGW 32位C编译器,使用C89 C90的标准)

//函数指针

int (*a)(int);

//函数指针数组

int (*b[10])(int);

//函数指针,返回int指针

int *(*c)(int);

void main(){

int i;

int * a1[10];

int *(*a2)[10] = &a1;

//a2的理解其实和a6一样,只不过最终的元素类型不一样,为了操作方便,还是主要测试a6

int **b1[10];

int ***b2 = b1;//b1 b2的区别是++等

int a3[10];

int *a4 = a3;//a3 a4的区别就是指针操作,比如++的结果可能不一样

int **a5 = &a4;

int (*a6)[10] = &a3;//a5 a6的区别 也是指针操作不一样

//难理解的是s6,分析s6很简单,但是怎么操作呢,请看后面的打印

char *s1[10] = {

"abc",

"def"

};

char **s2 = {

"abc",

"def"

};//这样定义编译不会报错,但是怎么操作s2呢?

for (i = 0; i < 10; ++i)

{

a3[i] = i;

//a6肯定是一个数组,既然是数组,一定可以用数组的操作方式([])操作

//a6[i] = a3 + 1; 编译不过

}

printf("%d\n", *(a6[0]));//

printf("%d\n", **a6);//

printf("%d\n", a3[5]);

printf("%d\n", *(a6[5]));// 输出的随机数,错误

printf("%d\n", (*a6)[5]);// 输出的是5,正确

//从打印结果可以看到,a6其实就是a3的一个指针(a3本身也是一个指针),不信看下面的测试

(*a6)[6] = 888;

printf("%d\n", a3[6]);//输出888

//我不知道还有没有a6的其他独有操作方法,如果没有我觉得就完全没必要写a6这种代码

printf("*(a3 + 6) ---- %d\n", *(a3 + 6));// 输出888,正常,a3+1最终值 = a3 + sizeof(int)/机器位数

printf("*((*a6) + 6) ---- %d\n", *((*a6) + 6));//意料之中,输出888

printf("*(a6 + 6) ---- %d\n", *(a6 + 6);// 随机数

printf("**(a6 + 6) ---- %d\n", **(a6 + 6));// 0 不懂意义

printf("%s\n", s1[0]);

printf("%s\n", *s2);//这里会运行错误

printf("%s\n", s2[0]);//这里会运行错误

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值