码迷,mamicode.com
首页 > 编程语言 > 详细

初学数组

时间:2019-06-01 09:36:05      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:引用   数组和指针   ret   大小   表达式   随机   char   含义   size   

数组的表达形式:  类型   数组名[常量表达式]  如:int arr[10];char brr[10];

对数组名和数组地址的测试//以下每次运行地址都是随机值,函数每次进栈都会有不同的地址,但地址关系一样

#include <stdio.h>
#include <string.h>
//数组名是数组首元素的地址 &a==a(值相同,类型不同);sizeof(a)==数组的大小,sizeof(&a)==指针的大小;
//*a==2; &a+1==数组整体加一;a+1==a[1];

int main()
{
int a[] = { 2, 3, 4, 5 }; //&a=int[4]* a=int[4]
printf("%d\n", &a);//11532432                                                   &a :数组的地址
printf("%d\n",&a[3]);//11532432+4*3                                         &a[3] :a[3]的地址
printf("%d\n", a); //11532432                                                     a :数组首元素的地址  
printf("%d\n", *a);//2                                                                  *a :数组首元素
int *ptr1 = (int *)(&a + 1);                                                         &a+1 :加整个数组大小字节
printf("%d\n",*a); //2                                                             
printf("%d\n", *(&a)); //11532432                                           *(&a) : 数组首元素的地址取地址后再解引用 (自我推测等问老师,如有大佬可以帮忙弟弟谢谢了)
printf("%d\n", &a); //11532432                                                 
int *ptr2 = (int *)((int)a + 1);//后移1个字节                   
printf("%d\n",a);//11532432                                                         a:强转后*a的值
printf("%d\n", *a);//2                                                                     *a:强转后竟还可以使用(感觉不太科学,这样随意遍历数字的地址不就很危险了吗)  
printf("%d\n", ptr2);//11532433   
int *ptr3 = (int *)(a + 1);//后移4个字节
printf("%d\n", ptr3);//11532436
printf("0x%d ,0x%d ,0x%d \n", ptr1[-1],ptr3[-1], *ptr2);// 0x5 ,0x2, 随机值
printf("%d\n", a[4]);//数组越界产生随机值
printf("%d\n",sizeof(a));//16                                                         sizeof(a)):数组的大小
printf("%d\n", sizeof(&a));//4                                                       sizeof(&a)):指针的大小

for (int i = 0; i < 10000000; i++)                             //由上面想到便试了一下,结果根本不会有对应地址的值,至于为什么还想求教各位大牛,感激不尽
{
int *b = (int*)(i + 4);
printf("%d\n", *b);

}

return 0;
}

 

/*
int main()
{
char array[] = "hello world";
char *p = array;
printf("%d\n", strlen(array));//11
printf("%d\n", sizeof(array));//12
printf("%d\n", strlen(p));//11
printf("%d\n", sizeof(p));//4
return 0;
}
*/

数组和指针数组 数组名的含义
/*
int main()
{
int intArray[] = { 12, 4, 56, 7, 8, 90, 41 };//数组
char *strArray[] = { "hello", "world" };//指针数组
//请定义指针指向以下给定的表达式
int*p1= intArray;
int(*p2)[7]= &intArray;
char**p3= strArray;
char*(*p4)[2]= &strArray;
printf("%d\n",*intArray);//12
printf("%d\n", intArray[6]);//41
printf("%d\n", *(intArray+0));//12
printf("%d\n", intArray[0]);//12

printf("%d %d %d %d\n", sizeof(intArray), sizeof(&intArray[0]), sizeof(intArray + 0), sizeof(intArray[0]));
// 4*7 4 4 4
printf("%d %d %d\n", sizeof(strArray), strlen(strArray[0]), sizeof(strArray[0]));
// 4*2 5 4
return 0;
}
*/

初学数组

标签:引用   数组和指针   ret   大小   表达式   随机   char   含义   size   

原文地址:https://www.cnblogs.com/xcb-1024day/p/10958305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!