编程基础C—— 详谈指针的定义与应用以及指针与数组的关系
指针的定义:
一个变量的地址称为这个变量的 指针。
指针的使用:
当一个函数需要返回一个以上的运算结果时,必须用指针。
需要改变实参的值时可以用指针;
定义指针变量的一般形式:类型修饰符 * 变量名;
与普通变量不同的是,在定义指针变量时,在变量前加 * 。
例:
(1)
int *a;
int b=10; int * a=10; 是错误的 !
a=&b;(相当于a=10)
(2)
int b=10;
int *p=&b;
*p=20;给指针指向的变量进行赋值(相当于b=20);
int c=*p;取出指针指向的变量的值;
结果 b=20;c=20;
注意:
在指针变量没有指向确定地址之前,不要对它所指的内容赋值。
初始化之后,指针名如果带*号,表示的是指针指向的变量值,不带*号,表示的是地址。
printf(“p=%p b=%p”,p,&b)打印地址。打印的是p中存放的b的地址。
应用实例:
1、用指针实现冒泡排序:
#include <stdio.h>
void fun(int *a)
{
for (int i=0;i<4;i++)
{
for(int j=0;j<4-i;j++)
if(*(a+j)>*(a+j+1))
{int t;t=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=t;}
}
printf("排序之后:");
for(int i=0;i<5;i++)
printf("%d ",a[i]);
}
int main(int argc, const char * argv[])
{
int a[5]={1,2,3,6,5};
fun(a);
return 0;
void fun(int *a)
{
for (int i=0;i<4;i++)
{
for(int j=0;j<4-i;j++)
if(*(a+j)>*(a+j+1))
{int t;t=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=t;}
}
printf("排序之后:");
for(int i=0;i<5;i++)
printf("%d ",a[i]);
}
int main(int argc, const char * argv[])
{
int a[5]={1,2,3,6,5};
fun(a);
return 0;
}
2、编写一个C程序,输入三个数字,然后按照从小到大输出,要求使用指针实现
#include <stdio.h>
int main(int argc, const char * argv[])
{
int d,e,f;
int *a,*b,*c;
a=&d;
b=&e;
c=&f;
printf("请输入三个数据:");
scanf("%d%d%d",&d,&e,&f);
int sum = d+e+f;
*a=(*a>*b?*a:*b)>*c?(*a>*b?*a:*b):*c;
*c=(*a<*b?*a:*b)<*c?(*a<*b?*a:*b):*c;
*b=sum-(*a+*c);
printf("从小到大的顺序为:%d %d %d",f,e,d);
return 0;
int main(int argc, const char * argv[])
{
int d,e,f;
int *a,*b,*c;
a=&d;
b=&e;
c=&f;
printf("请输入三个数据:");
scanf("%d%d%d",&d,&e,&f);
int sum = d+e+f;
*a=(*a>*b?*a:*b)>*c?(*a>*b?*a:*b):*c;
*c=(*a<*b?*a:*b)<*c?(*a<*b?*a:*b):*c;
*b=sum-(*a+*c);
printf("从小到大的顺序为:%d %d %d",f,e,d);
return 0;
}
3.用指针实现字符串的复制(拷贝);
第一种:字符串整体复制
#include <stdio.h>
int main(int argc, const char * argv[])
{
char *a="shang cheng.";
char *b;
b=a;
puts(a);
printf("b=%s",b);
return 0;
{
char *a="shang cheng.";
char *b;
b=a;
puts(a);
printf("b=%s",b);
return 0;
}
第二种:单个字符复制
#include <stdio.h>
void capy(char a[],char b[],char *p1,char *p2)
{
for(;*p1!='\0';p1++,p2++)
*p2 = *p1;
*p2='\0';
}
int main(int argc, const char * argv[])
{
char *p1,*p2;
char *a="shang cheng.";
char b[100];
p1=a;
p2=b;
capy(a, b, p1, p2);
puts(b);
return 0;
void capy(char a[],char b[],char *p1,char *p2)
{
for(;*p1!='\0';p1++,p2++)
*p2 = *p1;
*p2='\0';
}
int main(int argc, const char * argv[])
{
char *p1,*p2;
char *a="shang cheng.";
char b[100];
p1=a;
p2=b;
capy(a, b, p1, p2);
puts(b);
return 0;
}
感谢您的访问!
若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/