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
原创粉丝点击