C语言 指针
2016-07-18 00:33
369 查看
在使用指针之前一定要初始化,否则可能会引起程序崩溃,因为未初始化的指针是指向随机地址的.
可以使用malloc函数对指针进行初始化,malloc函数在stdlib.h中定义,malloc函数的参数是要申请内存的数量(以字节为单位).返回指向申请指定大小内存的指针.
要注意的是,可以直接使用指针来获得指针所指向数据类型的的大小
还有,malloc 函数返回的是 void * 类型。对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成强制转换的习惯。
若在声明变量几百行之后再初始化变量,这种方法是非常有用的.
释放申请的内存空间,使指针不指向任何变量.
指针的特点
算术运算
指针数组
指向指针的指针
给函数传递指针
函数返回指针
算术运算
在c语言中指针就是地址,是一个整数值,可以像其他自然数一样进行运算,指针支持4种运算操作符:+,-,–,++
指针的运算结果和指针所指向变量的类型类型有关.例如:
若ptr的初始值为1000,那么ptr+1运算之后,ptr的值为1004,因为int类型的大小为4字节,若ptr指向的字符,那么此时ptr的值为1001.
指针的比较
指针之间可以使用关系运算符进行比较,例如==,>,<
例子
指针数组
声明格式(指向整型的指针数组):
初始化
使用指针数组指向一系列字符串
未完,待续
可以使用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; }
未完,待续
相关文章推荐
- C++ 和 Makefile 笔记
- C++内存分配与管理
- 122. Best Time to Buy and Sell Stock II
- C++格式输出控制
- C++模板之特化与偏特化详解
- 省略号和可变参数模板
- 洛谷 P1965 [NOIP2013 D1T1] 转圈游戏
- C++ vector简单讲解
- C++ 友元
- C++中 vector容器——模板类数组
- Leet Code First Bad Version(C)
- C++11 lambda使用注意
- POJ 3461 Oulipo [KMP模板题]
- C++: 友元函数和友元类详解
- C++面试题总结
- Path Sum
- C语言的体系结构--main函数存在的必然性(听杨力祥老师的课)
- C语言的体系结构--main函数存在的必然性(听杨力祥老师的课)
- C++内存管理
- 配置eclipse编写C++程序