C语言 指针
来源:互联网 发布:成都软件测试工资 编辑:程序博客网 时间:2024/06/05 15:35
- 在使用指针之前一定要初始化,否则可能会引起程序崩溃,因为未初始化的指针是指向随机地址的.
- 可以使用malloc函数对指针进行初始化,malloc函数在stdlib.h中定义,malloc函数的参数是要申请内存的数量(以字节为单位).返回指向申请指定大小内存的指针.
#include<stdlib.h>int *ptr = malloc( sizeof(int) );
要注意的是,可以直接使用指针来获得指针所指向数据类型的的大小
还有,malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成强制转换的习惯。
#include<stdlib.h>int *ptr = malloc(sizeof(*ptr))
若在声明变量几百行之后再初始化变量,这种方法是非常有用的.
释放申请的内存空间,使指针不指向任何变量.
free(ptr);
指针的特点
- 算术运算
- 指针数组
- 指向指针的指针
- 给函数传递指针
- 函数返回指针
算术运算
在c语言中指针就是地址,是一个整数值,可以像其他自然数一样进行运算,指针支持4种运算操作符:+,-,–,++
指针的运算结果和指针所指向变量的类型类型有关.例如:
int *ptr = malloc(sizeof(*ptr));ptr = ptr + 1;
若ptr的初始值为1000,那么ptr+1运算之后,ptr的值为1004,因为int类型的大小为4字节,若ptr指向的字符,那么此时ptr的值为1001.
指针的比较
指针之间可以使用关系运算符进行比较,例如==,>,<
例子
#include <stdio.h>const int MAX = 3;int main () { int var[] = {10, 100, 200}; int i, *ptr; /* let us have address of the first element in pointer */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("Address of var[%d] = %x\n", i, ptr ); printf("Value of var[%d] = %d\n", i, *ptr ); /* point to the previous location */ ptr++; i++; } return 0;}
指针数组
声明格式(指向整型的指针数组):
int *ptr[MAX];
初始化
#include<stdio.h>#include<stdlib.h>const int MAX = 4; int main(int argc, char *argv[]){ int *ptr[MAX]; int i = 0; for (i = 0;i < MAX;i++) { ptr[i] = malloc(sizeof(*ptr[i])); }}
使用指针数组指向一系列字符串
#include <stdio.h>const int MAX = 4;int main () { char *names[] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali", }; int i = 0; for ( i = 0; i < MAX; i++) { printf("Value of names[%d] = %s\n", i, names[i] ); } return 0;}
未完,待续
0 0
- C语言中的指针
- C语言指针问题
- C语言野指针
- C语言之指针
- C语言指针简介
- C语言的指针
- c语言指针点滴
- C语言的指针
- c语言指针简介
- c语言 数组 指针
- c语言指针详解
- 理解C语言指针
- c语言函数指针
- C语言指针
- C语言之指针
- c语言指针详解
- c语言中的指针
- C语言--指针,数组
- Spring管理filter
- CSS3 3D变形
- RecyclerView实现条目Item拖拽排序与滑动删除
- Java学习总结-网络.
- amazon+shadowsockets
- C语言 指针
- 操作系统---进程/线程 间通信
- android中的AIDL进程间通信
- python的异步IO模块asyncio学习
- 操作系统---进程/线程 间通信
- C与C++ 混合编译
- 安卓自定义控件卡券CouponView
- 认识繁体字
- c++ opencv读取图片像素值并进行加密