9.9 指针数组、指针的指针、main函数参数、小结
- 一.指针数组概念回顾
- 二.指向指针的指针
- 三.指针数组做main函数形参
- 四.小结
- 1.指针数据类型小结表:
- 2.指针运算小结
- 2.1 指针变量的加减
- 2.2 指针变量的赋值
- 2.3 指针变量可以为空值,表示不指向任何变量
- 3.void *型指针 :万能型指针变量,也就是 能够指向任意数据类型
- 4.总结
一.指针数组概念回顾
一个数组,其元素均为指针类型数据,称为指针数组。 换句话说:指针数组中每一个元素都是指针变量。
指针数组的定义形式:
类型标识符 *数组名[数字长度说明]
int *p[4]; //每个数组元素都可以看成是一个指针变量,都可以指向 一个整形普通变量。
数组指针 int (*p)[4]; 这是指向一维数组的指针变量。也就是说,塔首先是一个指针变量。
int main()
{
cha *pName[] = {"C++","JAVA","PYTHON","GO","CSharp"}; //指针数组
int is1 = sizeof(pName); //每个指针变量战4个字节,有5个元素,所以一共占20个字节; 20
int isize = sizeof(pName) / sizeof(pName[0]); //20/4 = 5; 表示pName中有5个元素;pName能引用的下标就是[0]-[4]
int i;
char *p2 = "JAVA"; //把字符串的首地址赋给指针
==//p2 == pName[1] 下图1==
for(i = 0;i < isize;i++)
{
printf("pName[%d] = %s\n",i,pName[i]);
}
printf("------------------\n");
char *ptemp;
ptemp = pName[0]; //ptemp指向"C++"
pName[0] = pName[1]; //pName[0]指向了"JAVA"
pName[1] = ptemp; //pName[1]指向"C++" ==//下图2==
return 0;
}
二.指向指针的指针
指向指针的指针:用来指向指针变量的 变量,简称”指向指针的指针“
int main()
{
char **p; //定义了一个指向 字符串指针变量的 指针变量。
int **P; //定义了一个指向 整型指针变量的 指针变量
//*(*p); //表示 指针变量p 是 指向一个 指针变量,*p 是p所指向的 指针变量
//int ***p;
char *pp; //定义一个指向指针的指针
pp = &pName[0]; //*pp就是pp所指向的指针,也就是pName[0];
printf("pp = %s",pp);
printf("------------------\n");
int abc = 5;
int *pabc = &abc; //指向整形数据的指针
int **ppabc = &pabc; //指针 指针的指针
printf("abc = %d\n",abc);
printf("abc = %d\n",*pabc);
printf("abc = %d\n",**ppabc); // **ppabc 等价于 pabc,所以 **ppabc 等价于abc
return 0;
}
三.指针数组做main函数形参
指针数组有个重要应用:能够做main函数参数
int main(
int argc, //整型 ,是argv指针数组的元素个数
char *argv[] //指针数组 ,argv[0]保存的是 当前可执行文件的完整路径文件名
)
{
return 0;
}
四.小结
1.指针数据类型小结表:
2.指针运算小结
2.1 指针变量的加减
p++;p–
int *p;1000;1004
2.2 指针变量的赋值
int *p = 1000; //不可以,不能直接赋值数字,不要认为可以将地址1000赋值给p,只能将变量已经分配的地址赋值给指针变量;
int a;
int *p = &a;
2.3 指针变量可以为空值,表示不指向任何变量
int *p = NULL; //NULL 就是整数0,就是使p指向地址为0的单元;
//系统会保证地址为0的这个单元不存放有效数据
if(p ==NULL)
{
p = &a;
}
3.void *型指针 :万能型指针变量,也就是 能够指向任意数据类型
//*p;
int a = 3;
int *p = &a;
flot bf= 56.f;
float *pf = &bf;
//p = (int *)pf;
void *pwn = NULL;
pwn = p;
pwn = pf;
pf = (float *)pwn;
4.总结
优点:效率高;
缺点:太过灵活
整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记