数组及数组名地址,常量地址等一些简单的研究

来源:互联网 发布:windows截图快捷键 编辑:程序博客网 时间:2024/06/07 16:37
数组及数组名地址,常量地址等一些简单的研究

首先,声明一个数组和一个常量指针并指向那个数组。
1     int arr[3] = { 1, 2, 3 };      //声明数组
2     const int *p_arr = arr;        //声明常量指针
printf("*p_arr的长度=%d,arr的长度=%d\n", sizeof(p_arr),sizeof(arr));
运行结果:p_arr的长度=4,arr的长度=12
结论:数组名应该不是指针。



int arr[5] = {1,2,3,4};
int b=5;
const int *p_arr = arr;
const int *p = &b;
arr = p;
&arr[0] = p_arr;
运行结果:在arr = p;和&arr[0] = p_arr;处报错,
结论:数组名不是指针



const int *p_arr = arr; //重新声明一个,指向数组首地址
printf("p_arr=%p,arr_addr=%p\n", &p_arr, arr);
运行结果:p_arr=0060FEF8,arr_addr=0060FEF8

int arr[5] = {1,2,3,4};
printf("arr[0]=%d arr[1]=%d arr[3]=%d\n",*arr,*(arr+1),*(arr+3));
运行结果:arr[0]=1 arr[1]=2 arr[3]=4
结论:数组名可以作为指针使用。



const int a=5;
a = 6;
运行结果:报错——“a”不能给常量赋值 and 表达式必须是可修改的左值。
结论:常量不允许被修改(区别与变量的理解,变量,可变化的量的)。



const int a=5;
int *p_arr = &a;
printf("p_arr=%p a_addr=%p\n",p_arr,&a);
运行结果:p_arr=0060FF08 a_addr=0060FF08
结论:常量也具有地址



printf("3_arr=%p\n",&3);
结果:报错
printf("str_arr=%p\n","abc");
结果:str_arr=00403024
结论:常数没有地址,字符串常量就有地址(区别与常量与常数)



#define B 5
printf("B的地址=%p\n", &B);
运行结果:报错——常量上的“&” and 表达式必须为左值或者函数提示符。
结论:宏定义不能取地址
阅读全文
0 0
原创粉丝点击