优质网站建设是哪家,17网站一起做网店不发货,asp.net网站开发全过程,可以做问卷的网站一、指针与数组的基本用法
数组指针是指数组在内存中的起始地址#xff0c;数组元素的地址是指数组元素在内存中的起始地址一维数组的数组名为一维数组的指针#xff08;起始地址#xff09;
例如#xff1a;
double x[8];
因此#xff0c;x为x数组的起始地址 设指针变…一、指针与数组的基本用法
数组指针是指数组在内存中的起始地址数组元素的地址是指数组元素在内存中的起始地址一维数组的数组名为一维数组的指针起始地址
例如
double x[8];
因此x为x数组的起始地址 设指针变量px的地址值等于数组的指针x即指针变量px指向数组的首元数则 x[i] 、*(pxi)、*(xi) 和px[i]具有完全相同的功能访问数组第i1个数组元素。
使用指针遍历一维数组 指针变量和数组在访问数组中元素时一定条件下其使用方法具有相同的形式因为指针变量和数组名都是地址量
1.数组指针与指针数组 数组指针是一个指向数组的指针 指针数组是一个储存指针的数组
数组指针(表示一维数组)
#include stdio.hint main()
{int (*p)[3];/*定义了一个数组指针指向了一个数组长度为3的一维数组,注意是指向一个数组所以赋值给他的地址要是数组类型的地址可以这样理解一维数组名就是一个指针这里只是用指针的形式代替了数组名 注意这里的3要和指向的数组长度相同*/ int a[3] {1,2,3};p a;/*将数组a地址赋值给p此时(*p)[i]相当于a[i],注意不能写成pa或者pa[0]因为指针p是指向一个数组,pa表示p指向首个元素的地址虽然a,a[0],a的结果是一样的(这是因为数组一般用其首元素地址表示) */printf(数组指针指向一维数组的遍历\n); for(int i0; i3; i){printf(%d\n,(*p)[i]);}/*这里要用指针遍历输出a不能用*(pi)方式输出因为p表示数组a的地址(一般用数组中首个元素地址表示) p表示p要增加3*4个字节长度(3为数组指针指定的长度4为int所占空间大小) */ printf(--------------------------\n);printf(a%d\n,a);//输出a的地址 printf(p%d\n,p);//p指向了数组a所以输出为a的地址(一般用数组中首个元素地址表示)printf(*p%d\n,*p);//既然p指向了数组a那么*p则为数组a本身(一般用数组中首个元素地址表示)printf(p1%d\n,p1);printf(*(p1)%d\n,*(p1));//运用公式*(p1) p[1],可以想象成刚好超过a长度的那个地址p1表示p要增加3*4个字节长度(3为数组指针指定的长度4为int所占空间大小)*(p1)printf(**p%d\n,**p);//p指向a*p表示a本身(一般用数组中首个元素地址表示)那么**p表示*a,表示数组首元素。printf(p[0]%d\n,p[0]);//p[0] *p *p又是a本身所以输出a首元素地址printf(*p[0]%d\n,*p[0]);//既然p[0]为数组首元素地址那加上个*就为a的首元素 return 0;
} 二、指针与数组使用注意事项 1、数组名和指针有什么区别
1含义不同 数组名代表一个数组存放相同类型的元素指针代表存储地址的变量
2使用不同 数组名代表一个数组存放相同类型的元素指针代表存储地址的变量
3长度不同 sizeof数组名代表数组占用的总空间 sizeof指针和操作系统有关32位系统4个字节
4 本质不同 指针变量是地址变量而数组名是地址常量
三、总结
int a[3][4]{0}; 1、printf(“%d\n”,sizeof(a)); 解sizeof(a)表示计算整个数组的大小为34448 2、printf(“%d\n”,sizeof(a[0][0])); 解a[0][0]表示数组a中的第一个元素sizeof(a[0][0])计算数组a中第二个元素所占空间大小 3、printf(“%d\n”,sizeof(a[0])); 解a[0],相当于第一行的地址表示第一行所有元素。为4*416
4、printf(“%d\n”,sizeof(a[0]1)); 解a[0]没有单独放在sizeof()内部也没有取地址所以它现在表示第一行第一个元素的地址a[0]1表示第一行第二个元素的地址sizeof()计算地址为4/8 5、printf(“%d\n”,sizeof(*(a[0]1))); 解对第一行第二个元素解引用表示计算第二个元素所占空间的大小为4 6、printf(“%d\n”,sizeof(a1)); 解a是二维数组的数组名并没有取地址也没有单独放在sizeof内部所以a表示二维数组首元素地址即第一行的地址a1就表示第二行的地址计算地址为4/8 7、printf(“%d\n”,sizeof(*(a1))); 解对第二行解引用计算第二行所有元素大小为16 8、printf(“%d\n”,sizeof(a[0]1)); 解a[0]1表示取出第二行的地址计算地址大小为4/8 9、printf(“%d\n”,sizeof((a[0]1)); 解16(a[0]1表示对第二行解引用求第二行所有元素所占空间的大小 10、printf(“%d\n”,sizeof(*a)); 解16a没有单独放在sizeof()内部所以a表示二维数组首地址即第一行的地址*a对第一行解引用求第一行所有元素所占空间的大小 11、printf(“%d\n”,sizeof(a[3])); 解16a[3]其实是第四行的地址如果存在的话其实在内存中并不存在a[3],但是sizeof并不会计算表达式的值它也会通过表达的类型计算它所占空间大小我们知道一个表达式int a 35;a有两个属性一个值属性:8一个类型属性int而size of()是计算变量所占空间大小即表达式的类型所占空间大小它并不会计算表达式的值。