函数指针
#include <stdio.h>
#include <stdlib.h>
void welcome()
{
printf("Welcome !!!!!!\n");
}
int add(int a,int b)
{
return a+b;
}
int main()
{
/*
int a = 10;
printf("a = %d\n",a);//通过变量名来访问变量
int* p;//通过指针来访问变量
p = &a;
printf("a = %d\n",a);
*/
welcome();//通过函数名来调用函数
//1.如何标识指针: *
//2.如何知道是函数 ()
//3.函数指针是专用的格式要求很强(参数类型,个数,返回值),就像数组指针一样
//一、定义函数指针
void (*p2)();
//二、如何给函数指针赋值
p2 = welcome;//函数名就是地址
//三、如何通过函数指针调用函数
p2();//方式1:直接通过指针名字+()
(*p2)();//方式2:取内容(*指针名字)()
//示例
int (*padd)(int a,int b);
int ret,ret2;
//调用
padd = add;
ret = padd(1,2);
ret2 = (*padd)(1,2);
printf("%d\n",ret);
printf("%d\n",ret2);
system("pause");
return 0;
}
无类型指针&&malloc
首先说一个malloc函数
C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
使用示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//int a[3];
int i;
int *a = (int *)malloc(3*sizeof(int));
for(i=0;i<3;i++)
{
a[i] = i;
printf(" %d \n",a[i]);
}
system("pause");
return(0);
}
无类型并不是真的没有类型,而是不知道什么类型,malloc返回的类型是无类型的void,强转换成int *型,这样子才能定义一个int *型的指针,指向malloc开辟的地址。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入元素总个数:\n");
scanf("%d",&n);
int *parry = (int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的成绩:\n",(i+1));
scanf("%d",&parry[i]);
}
for(i=0;i<n;i++)
{
printf("第%d个学生的成绩为%d:\n",(i+1),parry[i]);
}
system("pause");
return 0;
}
内存泄漏
内存泄漏:
程序运行一段时间以后崩溃如
while(1) {
sleep (1) ;
int *p = malloc (1024);//malloc 申请的空间,程序不会主动释放
//linux中的话,程序结束后,系统会回收这个空间。
}
避免:
1.注意,循环中有没有一直申请空间
2.及时合理得释放 free§; p = NULL;
int *p;
int *p = NULL;
inta=0;
int sum = 0;
指针小检测
int a;//1
int *pa; //2
int array[5]; //3
int *p[4]; //指针 数组.4
int (*p) [4]; //数组指针 p++.5
int f();//6
int* p();//7
//***************************
int *p(int *pa) {
return pa ;
}
main (){
int a;
int *p2 = NULL;
p2 = p(&a);
}
//8
int **p;
void *P;