如何设计网站的主菜单,婚庆网站开发的意义,免费个人简历模板在线编辑,wordpress插件外贸指针和一维数组
一个数组包含若干元素#xff0c;每个数组元素都在内存中占用存储单元#xff0c;它们都有相应的地址。指针变量既可以指向变量#xff0c;当然也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。 eg#xff1a;
int a[6]; //定义一个整数数组a…指针和一维数组
一个数组包含若干元素每个数组元素都在内存中占用存储单元它们都有相应的地址。指针变量既可以指向变量当然也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。 eg
int a[6]; //定义一个整数数组a它有6个元素
int *p; //定义一个整型的指针变量 *p
//下述表达等价
pa[0]; //将元素a[0]的地址赋给指针p使p指向a[0]
pa //数组名代表数组第一个元素所以该式与pa[0]等价如果p的初始值是a[0]则需要注意 ①pi和ai就是a[i]的地址或者说它们指向a数组的第i个元素如果p已经指向数组中的一个元素了则p1指向下一个元素 ②*(pi)或*(ai)是pi或ai所指向的数组元素的值 ③指向数组元素的指针变量也可以带下标如p[i]和*(pi)等价
指针和二维数组
首先定义一个二维数组
int a[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}}上述的二维数组是由3个一维数组构成的即a数组包含3行a[0]行a[1]行a[2]行每个一维数组又包含4个数组元素由此可见二维数组是“数组的数组”a是数组名代表二维数组首元素的地址现在的首元素不是一个整型变量而是由四个整型元素所组成的一维数组因此a代表的是首行的起始地址即第0行的起始地址a[0]a1代表a[1]行的首地址即a[1]C规定了数组名代表数组首元素的地址所以a[0]a[1]a[2]就是一维数组名所以a[0]相当于a[0][0]a[1]相当于a[1][0]a[2]相当于a[2][0]0行1列元素的地址可以直接写为a[0][1]用指针表示为a[0]1所以i行j列的元素的地址用指针表示为a[i]ji行j列元素的值用指针表示为*(a[i]j)或者 *( *(ai)j)
字符指针和字符数组
char str[]I love C; //用字符数组存放一个字符串
char *strI love C; //用字符指针指向一个字符串上述两种方式打印的str结果是一样的。 那他们有什么不同呢
存储方式的不同
char str1[]hello;
char str2[]hello;“hello是一个常量保存在常量存储区所以str1并不是数组hello的首地址它只是一个变量保存在栈中str2也是在栈中申请了额外的空间保存hello”所以这里str1不等于str2。
const char str3[]hello;
const char str4[]hello;使用const定义的变量一般是不分配内存的而是保存在符号表中。但是对于const数组来讲系统不确定符号表是否有足够的空间来存放const数组所以还是为const数组分配内存的因此str3和str4都各自分配了内存因而不相等。
const char* str5[]hello;
const char* str6[]hello;这里str5和str6都是指针保存在符号表上指向的是常量存储区中的hello所以str5str6。
赋值方式不同 对字符指针变量可采用下面的方式赋值但是字符数组不行对字符数组只能对各个元素赋值
const char* array;
arrayI love C; //合法
//下列表述不合法
char str[10];
strI love C;指针变量的值是可以改变的但是字符数组名是不能改变的
const char *arraywelcome to C;
arrayarray1; //此时array打印结果为elcome to C指针数组和数组指针
指针数组即存储指针的数组首先它是一个数组数组的元素都是指针数组占多少字节由数组本身决定。 数组指针即指向数组的指针首先它是一个指针它指向一个数组。
指针数组定义int *p1[10]首先[]的优先级比 * 要高所以p1先与[]结合构成一个数组定义数组名为p1。其次“ int * ”修饰的是数组内容也就是说指针数组中的每一个元素相当于一个指针变量它的值都是地址。数组指针定义int (*p2)[10] 这里()的优先级比[]高*和p2构成一个指针定义指针变量名为p2int修饰的是数组的内容即数组的每个元素数组在这里并没有名字是个匿名数组。所以p2是一个指针指向一个包含10个int类型数据的数组。
指向指针的指针
指针可以指向一份普通的数据也可以指向一份指针类型的数据。 eg
int a10;
int *p1a;
int **p2p1他们的关系如下
const指针
const关键字指定了一个不可修改的变量但并不是常量它可以使编译器帮助用户定义的某些变量不被意外修改。 1指针包含的地址是常量不能被修改但可以修改指针指向的数据 eg
int x30;
int* const px;
*p33; //指向的数据可以更改
int y28;
py; //不能更改地址2指针指向的数据为常量不能修改但可以修改指针包含的地址即指针可以指向其他地方
int x50;
const int* px;
int y25;
py; //可以更改指针的地址
*p20; //不能更改指针指向的数据注通过上述一二可以看出当const在 * 前时其修饰的是指针指向的内容但指针本身是可变的当const在 * 后面时其修饰的是指针本身但其指向的内容是可变的。 3指针包含的地址以及它指向的值都是常量不能修改 eg
int x12;
const int* const px; //此时都不能修改