指针编程之道
来源:互联网 发布:相关系数矩阵怎么看 编辑:程序博客网 时间:2024/06/05 19:43
指针编程之道
1、分类:变量指针、数组指针
(1)变量指针
char str[]="china is beautiful";
char *p;
p=str;
p=&str[0];
注:*p=5 赋值,a=*p 取值,&b 取址
(2)指针数组
char *p[]={"what","is","that"};
小猪:定义函数若在main()函数之后,则需要先声明该函数;若在main()之前则不用声明
2、指向结构体的指针
typedef struct
{
char head;
char end;
char data[3];
}stu;
(1) stu pp; //定义结构体变量
stu *p; //定义结构体指针变量
(2) pp.head; //结构体变量引用
p->head; //结构体指针变量引用
stu txbuf[3]={{'a','b','c','d','e','f'},{},{}};
stu *p=txbuf;
printf("%c",p[0].head);
小猪:程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc()来为指针分配安全的地址。函数sizeof()返回值是计算给定数据类型所占内存的字节数。
struct stu *student; //定义结构体类型指针
student=malloc(sizeof(struct stu)); //为指针变量分配安全的地址
struct stu *student; //定义结构体类型指针
student=malloc(sizeof(struct stu)); //为指针变量分配安全的地址
3、函数指针:即函数的入口地址,一个函数只有一个指针,不能通过指针的移动访问函数体中的语句。
void output();
int main()
{
void (*p_output)(); //声明函数指针,括号不能省略
p_output=output; //指向定义的函数
(*p_output)(); //通过函数指针调用函数
}
4、指针函数:返回值是指针的函数
定义: int *p_fun(); //由于()优先级高于*,所以该定义是一个函数
5、main返回值
单进程系统:可以为void main();或int main();
多进程系统:int main();该返回值返回给操作系统
main两种定义方式:
int main(void); 和 int main(int argc,char *argv[]);
小猪:二维数组,只定义未初始化,则元素值是未知的;定义并初始化部分元素,则未定义的值为0.
6、指针的指针:即指向指针的指针
char str[]={};
char *p=str;
char *str[]={"china","is"}; //该定义一般都是用于对字符串操作
char **p=str;
7、二维数组
grid[i][j]: grid是grid[0]的地址,grid[0]是grid[0][0]的地址。
则,grid[i] <--> *(grid+i)
grid[i][j] <---> *(grid[i]+j)
所以:grid[i][j]的两种表达形式
*(grid[i]+j) 和 *(*(grid+i)+j)
8、动态分配内存
(1)void *malloc(unsigned int num_bytes); //动态分配num_bytes字节的内存
(2)void *calloc(unsigned num,unsigned size); //分配num*seze大小的内存
(3)void *realloc(*ptr,size_t size); //对ptr指向的内存,重新分配size大小的内存
9、释放内存
void free(void *ptr); //释放ptr指向的内存
小猪:内存释放只是把该内存的数据变为无效数据,但指针仍指向该内存,所以,释放内存的同时要将ptr=null
10、const用法
(1)const int *p <----->int const *p :指向整型常量的指针,p可以变,但*p不可以变
(2)int * const p :p是指针常量,p不可以改变,但*p可以改变
(3)const int * const p :p和*p均不可改变
小猪:const位于*左侧,则是修饰指针所指向的变量;位于右侧,则是修饰指针本身。
- 指针编程之道
- C指针编程之道(一)- 指针与数组
- C指针编程之道(二)- 指针与函数
- C指针编程之道 -1
- 摘自C指针编程之道-队列
- C指针编程之道 ---第一次笔记
- C指针编程之道 ---第二次笔记
- C指针编程之道 ---第三次笔记
- C指针编程之道--------笔记
- C指针编程之道 ---第四次笔记
- C指针编程之道 ---第五次笔记
- C指针编程之道 ---第六次笔记
- C指针编程之道 ---第七次笔记
- C指针编程之道 ---第八次笔记
- C指针编程之道 ---第九次笔记
- C指针编程之道 ---第十次笔记
- C指针编程之道 ---第十一次笔记
- C指针编程之道(五)- 排序算法
- POJ-1328(贪心算法)
- Android中asset文件夹和raw文件夹区别
- 挑战编程 程序设计竞赛训练手册-1.6.4 液晶显示屏(LC-Display)
- 作为应届毕业生如何写个好简历
- ACM -- 魔兽传说
- 指针编程之道
- 杭电 2084
- UML学习之初步总结
- ExtJS学习------Ext.lib.event函数介绍
- Java基础语法
- 利息计算器
- TCP的三次握手和四次挥手
- HyperLinkColumn用法
- 2012天津现场赛