冷暖自知

算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。...

C总结-第四章 指针数组(4/6)

第四章 指针数组

1. 非零为真,零为假

★实例:

int a=2, b=3, c=5;

int x1, x2, x3;

x1 = (a>0); x2 = (b<0); x3 = (c==5);  //x1=1, x2=0, x3=1

 

2. a 和 &a的区别

对指针加1的操作,得到的是下一个元素的地址,移动单位为sizeof(数据类型)。

a:数组首元素首地址

&a[0]:数组首元素地址

★实例:

int a[5];

&a+1  //&a+sizeof(int),下一个数组首地址

a+1  //数组a中下一个元素

 

3. 指针和数组

指针:用于动态数据结构

数组:存储固定数目且类型相同的元素

 

4. 指针数组和数组指针

指针数组(数组):int *p[10];  //数组,元素为指针([]优先级高于*)

数组指针(指针):int (*p)[10];  //指针,二维数组,指向整个数组(指向包含十个元素的数组)

 

5. 检查机器存储方式(大端或小端)

小端:低位在低地址,高位在高地址 (数据左高位右地址)

大端:低位在高地址,高位在低地址

★实例:

int CheckStore()  //1小端,否则为大端

{

union check

{

int i;

char ch;

}c;

c.i = 1;

return (c.ch == 1); 

}

 

6. 逗号表达式

表达式1, 表达式2, ......表达式n

1)逗号表达式的运算过程为:从左到右逐个计算表达式的值

2)逗号表达式作为一个整体,它的值为最后一个表达式(即表达式n)的值

3)逗号运算符在所有运算符中最低

 

7. 多组指针,数组

★实例:

int a[5][5];

int (*p)[4];

p = a;

问:&p[4][2] - &a[4][2]值为多少?(答案:-4)

&p[4][2]=4*4*sizeof(int) + 2*sizeof(int)

&a[4][2]=4*5*sizeof(int) + 2*sizeof(int)

 

8. 数组参数与指针参数

形参:声明或定义时的参数

实参:调用函数时,传递过来的实际值

1)C语言中,当一位数组作为函数函数的时候,编译器总是把它解析为一个指向其首元素首地址的指针。(无法向函数传递一个数组)

2)函数本身无类型,只有返回值才有类型

3)main函数内的变量是局部变量,不是全局变量

4)无法将指针本身传递给一个函数

5)想要用指针分配内存:①一级指针用return  ②二级指针

6)char a[3][4] 等效于 char (*p)[4]

     char *a[5] 等效于 char **p

 

9. 函数指针(指针):可以将统一功能的多个模块统一标识

函数名即为入口地址,函数名 等价 &函数名

★实例:

(* (void (*) () ) 0) () 

① void (*) ()  是一个无参数无返回值的函数指针,*表示指针

/*

void(*)()是一个返回值为void,参数为空的函数指针类型

void(*abc)();就是定义了一个“返回值为void,参数为空”的函数指针abc,可以这样调用:abc();

*/

②(void (*) ()) 0  强制类型转换,0是一个地址,将0强转为函数指针

③(*(void (*) ()) 0)  取0地址开始的一段内存里的内容

④(* (void (*) () ) 0) ()  函数调用

 

10. 函数指针数组(数组):用于编写具有相似功能的函数

 

11. 函数指针数组指针:一个指向数组的指针,数组里元素都是指向函数的指针而已

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/g_ithot/article/details/43986455
文章标签: c
个人分类: C
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭