您的位置:首页 > 编程语言 > C语言/C++

C语言 指针

2016-07-18 00:33 369 查看
在使用指针之前一定要初始化,否则可能会引起程序崩溃,因为未初始化的指针是指向随机地址的.

可以使用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;
}




未完,待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: