#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("%p\n", a);
printf("%p\n", *a);
return 0;
}
打印的结果是,一样的指针.
a究竟是怎么存储的,怎么会出现a和*a是一样的呢?
C语言里int a[10]的话,a是一个指针指向a[0]的指针
C语言里int a2的话,a[0]是一个指向a0的指针,a[1]是一个指向a1的指针
在你的代码里,int a2
*a指向a0这个int
a指向a[0] = {1, 2, 3}这个array。只不过在C里面,array的地址就是array第一个元素的地址,所以在这里a = a[0] = a0
a是*int[3]的指针,对其进行+1操作,内存指针往后移动sizeof(int[3])个位置
*a是int指针,对其进行+1操作,内存指针往后移动sizeof(int)个位置
你可以运行下面代码测试下
#include<stdio.h>
int main(){
int a[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("%p\n", a);
printf("%p\n", a+1);
printf("%p\n", (*a+1));
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。