指针三
一二维数组名作为函数参数
void showmap(int mapp[][10]){}
func(const int array[])
返回指针的函数(指针函数)
//循环,进行判断 如果*—Str的值与_Val的值是一样的,那我们就返回这个_Str的地址
字符类型的指针 字符数组 一个字符
char* Mystrchr(const char*_Str,int _Val){
if(_Str !=NULL){
while(*_Str++ !='0'){
if(*_Str == _Val){
return(char*)_Str
}
}
}
}
指向函数的指针(函数指针)
1:函数的函数名就是指针就是内存中占据空间的编号
2:如何通过P变量存储的指针编号去调用函数呢?
void show(){printf("2131231")};
int main(){
int P=show;
((void(*)())p)();
return 0;
}
//P存储的show函数的地址
//show函数是void()
//(void(*)()) (void(*))代表void类型的指针 ()代表函数
((void(*)())p)(); 解引用,类型强转
第二种 void(*p)()=show; 定义
*p指向的就是void show(); 中的show
计算器
int add(int x,int y){return x+y;}
void show(int x,int y,int (*pFunc)(int x,int y)){//回调函数
printf("%d
",pFunc(x,y));
}
int main(){
show(2,3,add);
//也可以吧add换成任意自定义算法函数名
}
函数的函数名就是地址
类型名+变量名+(函数参数);
int add (int x,int y);
int (*p) (int x,int y)
三个函数 memset,memcpy,memmove
内存设置,内存拷贝,内存移动
char str[128];
memset(str,0,128);//清空,吧str数组中占据的128字节全部清空
定义 | 说明 |
---|---|
int i | 定义整形变量 |
int *p | 定义一个指向int的指针变量 |
int a[10] | 定义一个int数组 |
int *p[10] | 定义一个指针数组,其中每个数组元素指向一个int型变量的地址 |
int (*p)[10] | 定义一个数组指针,指向int [10]类型的指针变量 |
int func() | 定义一个函数,返回值为int型 |
int *func() | 定义一个函数,返回值为int *型 指针函数 |
int (*p)() | 定义一个指向函数的指针,函数的原型为无参数,返回值为int |
int **p | 定义一个指向int的指针的指针,二级指针 |
指针变量 变量指针
指针数组 数组指针
指针函数 函数指针
argc 使用软件时参数的个数,
argv 参数的指令
//指针的骚操作 三目运算符!!! bat的面试题
/*
1.c语言的三目运算和c++有区别吗???
有区别,c不能赋值,c++能赋值
2.如果有区别如何实现c语言和c++一样的效果???
*(a < Data[5] ? &a : &Data[5]) = 10086;
*/
int Data[10] = { 10, 50, 30, 40, 50, 70, 80, 90, 100 ,1};
int a =Data[0];
int c = 0;
//for (int i = 0; i < 10; i++){//*值的地址 解引用=赋值
*(a < Data[5] ? &a : &Data[5]) = 10086;
//}
printf("%d
", a);
//printf("%d
", c);