一些函数、指针、const、结构体、extern零散整理
2017-07-19 20:52
295 查看
1、啥时候用指针作为函数名,函数参数?(1)做函数名的时候把他作为函数指针,格式:type (*p)(type,type),从格式来看(*p)是函数名,括号要加的,括号的优先级大于*定义函数指针:int (*p)(int,int) = max //max也是一个函数,int max(int ,int)因为函数也可以看作是一大堆连续数据的集合,函数名也会被看作这堆数据的首地址,所以才可以用函数指针来指向其他函数;(2) 当main( )函数当中的实参是数组,或者字符串的时候,这些实参因为是以数据集合存在的,量比较大,所以是不能一下子传递过来的,这时候就函数的形参就用指针来表示,把实参通过地址传递过去,用指针来遍历实参数组,字符串的地址--进而遍历他们内存上的数据;
#include<stdio.h> int func(int a[])// 这里的a[]看着是数组,其实编译器都是不给他们分配内存的,最后都还是把他们转换成指针int *a的形式; { } int main() { int a[] = {1,2,3,4,5,6} func(a); return 0; }2、结构体指针:int main1(){// 定义了一个结构体变量// 结构体变量名和数组名进行区分// 数组名代表数组首个元素的地址// 结构体变量是一个变量不是地址struct student stu; // 定义了一个结构体变量指针struct student *p = &stu;// 通过指针使用结构体变量:需要新的运算符->// ->只是用在结构体指针变量引用成员变量的时候p->id = 10; // stu.id = 10;strcpy(p->name, "abcd");printf ("id = %d, name = %s\n", p->id, p->name);return 0;}ps:将结构体变量a所占的内存空间赋值为0memset (&a, 0, sizeof(struct A)); // 结构体变量的地址,从首地址开始,结构体A的长度 //也就是从首地址到sizeof((struct A))全部清零;3、extern:extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。4、const修饰指针:(const会在编译的时候提醒你,你改变了自己不想改变的量,从而提高了程序的安全性)const int * p; // p可变,p指向的对象不可变int const * p; // p可变,p指向的对象不可变int * const p; // p不可变,p指向的对象可变const int * const p; // 指针p和p指向的对象都不可变 这里给出一个记忆和理解的方法:先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近,“近水楼台先得月”,离谁近就修饰谁。const (int) *p //const 修饰*p,p是指针,*p是指针指向的对象,不可变。(int) const * p; //const 修饰*p,p是指针,*p是指针指向的对象,不可变。( int) * const p;//const 修饰p,p不可变,p指向的对象可变const ( int)* const p; // 前一个const修饰*p,后一个const修饰p,指针p和p指向的对象都不可变看例子:
#include<stdio.h> //先说一个基础的const 修饰整形; #if 0 int main1() { int const a = 20; //a = 10 //编译会出错!提示你在修改一个只读变量! int *p = &a; //以下两行是流氓方法 =_=! *p = 10; printf("%d\n",a);//按理来说变量a的值不能变,可是输出的结果是10;这里指针是流氓的,把只读的数据改了值 return 0; } #endif //下面是const 修饰指针 int main() { int a = 10; int const *p = &a;//const 修饰*p p ++; // *p = 20; //因为这里是*p不可变,所以编译会出错; int * const p1 = &a;//const 修饰p1; *p1 = 20; // p1 ++; //因为这里是p1 不可变,所以编译报错; return 0; }
相关文章推荐
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
- Day13、结构体类型、结构体与指针和函数的联合调用
- C/C++基础———C/C++中函数指针和数组指针、数组名的一些个人理解
- 返回值为引用或指针的成员函数加const要注意
- [转]linux时间相关结构体和函数整理
- 函数返回类型为指针类型时的一些问题
- 关于函数指针的一些理解与其他相关内容的联想
- 函数 指针 结构体的综合应用
- objective-C 使用包含函数指针的结构体
- 纯c与c++:函数传递-指针/引用,typdef struct + 结构体/枚举
- c 语言中一些特殊函数的整理
- 用结构体变量和结构体变量的指针做参数函数
- 关于const引用、常量指针、指针常量的一些知识
- 【C 语言】结构体相关 的 函数 指针 数组
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- C语言结构体指针,函数指针的用法
- C语言中关于数组、指针以及函数的一些基本知识
- 结构体中指向函数的指针
- 结构体中指向函数的指针
- 整理一些我经常用到的函数吧(不断更新)