您的位置:首页 > 其它

指针的使用注意事项(个人体…

2013-12-19 20:30 225 查看
原文地址:指针的使用注意事项(个人体会)作者:残翅天使的眼泪1.指针一定要有指向(赋值),就是一定要“初始化”。否则容易产生莫名的错误。

初始化又分为3种。

第一种,指向实心砖头(NULL)。即:p=NULL。此时指针的地址值为0.指针指向一个实心的转头,指针只有指向,指向的转头里面不能放任何数据。

第二种,指向满仓库(仓库里放了东西,所以称为“满”)。这个仓库里面可能放的是变量,指针,函数,数组等。这类变量,指针,函数,数组都是已经赋值了(定义过了,或者叫初始化过了)。

例如:int
a,*p;
int a[3],*p;

a=3;
a[3]={2,4,1};

p=&a;
p=a;

第三类,指向空仓库(仓库里没有放东西,所以称为“空”)。这个仓库里面可能放的是变量,指针,函数,数组等。但是这类变量,指针(指针最好要初始化,说成一定要初始化也不为过),函数,数组都是没有赋值了(定义过了,或者叫初始化过了)。

例如:int
a,*p;
int a[3],*p;

p=&a; p=a;

仓库名:地址值

仓库内容:地址存放的内容(指针指向的内容)

指针就是存放地址值的变量,指针可以指向空值(NULL),可以指向未赋值的变量(空仓库),但是不能不给指向。

2.如果要使用一个作为中间变量的指针,指针不要乱赋值,最好给这个作为中间变量的指针指向一个新的变量,以避免和需要操作的变量发生关联,而影响程序的正确性。

例如:要实现a和b互换,需要互换。

用变量实现:int a,b,t;

t=a;a=b;b=t;

用指针实现:int a,b,c,*t,*p,*q;

p=&a,q=&b,t=&c;
// 指针t指向了一个新的变量c,而不是简单的指给了a或者b

*t=*a;*a=*b;*b=*t;(如果这一句改写为t=a,a=b,b=t,a和b没互换,只是换了指针p和q的指向)

实例分析:输入三个字符串,按由小到大的顺序输出:

错误程序:

#include<stdio.h>

#include<string.h>

#define M 40

main()

{

char
a1[3][M]; //char
a1[3][M],b1[3][M];

char (*p)[M];

char
(*temp)[M];

p=a1;

temp=a1; //把中间变量指针temp赋予后面需要操作的a1,结果导致出错,因为中间变temp指向a1对后面对a1的操作影响了 //temp=b1;

int i,j;

printf("put into your text:n");

for(i=0;i<3;i++)

{

scanf("%s",p++);

}

for(i=0,p=a1;i<3;i++)

{

printf("%s
",p++);

}

printf("n");

for(j=0,p=a1;j<2;j++)//冒泡法

{

for(i=0;i<2-j;i++)

if(strlen(*(p+i))>strlen(*(p+i+1)))
//实现字符数组与字符数组的互换

{

strcpy(*temp,*(p+i)); //字符串赋值要用strcpy实现

strcpy(*(p+i),*(p+i+1));

strcpy(*(p+i+1),*temp);

}

}

for(i=0,p=a1;i<3;i++)

{

printf("%s ",p++);

}

printf("n");

输入how is
y

输出y y
is(明显是错误的) //输出y is how
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: