C总结-第四章 指针数组(4/6)
2015-02-28 15:40
169 查看
第四章 指针数组
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();
*/
4000
②(void (*) ()) 0 强制类型转换,0是一个地址,将0强转为函数指针
③(*(void (*) ()) 0) 取0地址开始的一段内存里的内容
④(* (void (*) () ) 0) () 函数调用
10. 函数指针数组(数组):用于编写具有相似功能的函数
11. 函数指针数组指针:一个指向数组的指针,数组里元素都是指向函数的指针而已
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();
*/
4000
②(void (*) ()) 0 强制类型转换,0是一个地址,将0强转为函数指针
③(*(void (*) ()) 0) 取0地址开始的一段内存里的内容
④(* (void (*) () ) 0) () 函数调用
10. 函数指针数组(数组):用于编写具有相似功能的函数
11. 函数指针数组指针:一个指向数组的指针,数组里元素都是指向函数的指针而已
相关文章推荐
- 第四章 数组和指针(part5) 总结 & 常用术语
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 《C++Primer》 第四章 数组和指针
- 第四章:数组和指针
- [转]字符数组,字符指针,Sizeof总结
- 指针与数组(第一次写博,写些自己总结的东西)
- 【转】字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- c 多维数组 指针关系总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 字符数组,字符指针,Sizeof总结
- [转]内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 字符数组,字符指针,Sizeof总结
- 数组与指针的艺术 第四章 []运算符的本质
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 数组和指针可交换性总结