#include<stdio.h>
#include<stdlib.h>
/*
总结:不管他前面有几个心
*/
Void getData01(char *p1)
//char *p 形参 行参 元素被调用该函数的参数,只不过具有对外属性而已
{
Printf(“getData01() begin\n”);
Return;
}
Void getdata02(char **p2)//char **p2 行参 p2是变量
{
Printf(“getData01() begin\n”);
Return;
}
Void getdata03(char *******p7)*******p7 行参 p2是变量
{
Printf(“getData01() begin\n”);
return ;
}
Void main()
{
Int *p1=null;
Int **p2=null;
Int a=10;
Int *p3=null;
Int c=0;
a=20;//直接通过变量修改a的值
P3=&a;//将a的地址赋值给p3
P3=30;//间接的修改p3的值
C=*p3;
//将p3的里面的值,赋值给c;注意不是地址,解释*p3里面放着的a的地址,a=20,在将 20赋值给c;
总结:*p的意义,*就像一把钥匙,根据一个指针的值,去修改后面的内存空间
如
/*
While(*p!=’\0’)
{
*p++ = *p2++;
解释 p2++是取值,取出来的值赋值给*p++
}
*/
}
//练习
Void main()
{
Char *p1=null;
//定义一个char类型的指针变量p1,将p1的值赋值为null;
Char *p2=null;
//定义一个char类型的指针变量p2,将p2的值赋值为null;
Char buf1[100]={0};
//定义一个char类型的数组为buff1,其中的buf1的元素个数是100个
Char buf2[100]={0};
//定义一个char类型的数组为buff2,其中的buf2的元素个数是100个
Strcpy(buf,”abcdefg”)
P1=buf1;
//将buf1的首地址赋值给p1
P2=buf2;
//将buf2的首地址赋值给p2
While(*p1 !=’\0’)
{
*p2=*p1;
//*放在左边是赋值
//*放在右边是取里面的值
P2++;//向后移动一个字节,如果是int类型的话就移动4个字节
P1++;
}
}
重点
问一下你是怎么理解下面的指针的
1、对参数的指针类型应该怎么理解
a) 理解角度需要从两个角度出发
i. 占在c/c++编译器的角度对型参,如果是指针类型,c编译器只会分配4个字节
ii. Char *p形参 p是变量
2、指针的数据类型到底是什么
a) 指针的数据类型是值它所指的内存空间的数据类型
i. 指针的数据类型具有依附特性
结论:指针的补长,根据所指内存空间类型来定
void senddata01(char *p1); void senddata01(char* p1);
void senddata02(char ** p1); void senddata02(char * *p1); void senddata02(char **p1);
void senddata03(char ***p1);
void senddata04(char *p[]); void senddata04(char * p[]); void senddata04(char *p []);
void senddata05(char (*p)[10]); void senddata05(char (*p) [10]);
void senddata05(char *****p4);