初学数组
Posted xcb-1024day
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学数组相关的知识,希望对你有一定的参考价值。
数组的表达形式: 类型 数组名[常量表达式] 如: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;
*/
以上是关于初学数组的主要内容,如果未能解决你的问题,请参考以下文章