C语言指针
1.指针用法事例
#include <stdio.h>
int main()
{
int var=10;
int *ptr_var;
//指针ptr_var指向变量var
ptr_var = &var;
//输出变量var的值和var的地址
printf("var的值是:%d\n", var);
printf("var的地址是:%x\n", &var);
//输出ptr_var的地址
printf("ptr_var的地址为:%x\n", &ptr_var);
//输出指向变量的指针, 输出变量var的值和存储地址
printf("var的值是:%d\n", *ptr_var);
printf("var的地址是:%x\n", ptr_var);
return 0;
}
2. 通过指针间接将一个变量值赋给另一个变量
#include <stdio.h>
int main()
{
int num1=50, num2=100;
int *ptr1, *ptr2;
//ptr1指针指向变量num1
ptr1=&num1;
printf("num1变量的值是:%d\n", *ptr1);
printf("num1变量的地址是:%d\n", ptr1);
ptr2=&num2;
printf("num2变量的值是:%d\n", *ptr2);
printf("num2变量的地址是:%d\n", ptr2);
//将ptr1指向的变量值num1也让ptr2指向
*ptr2=*ptr1;
printf("重赋值后的num2的值是:%d\n", *ptr2);
printf("重赋值后的num2的地址是:%d\n", ptr2);
return 0;
}
3.使连个指针指向同一个变量
#include <stdio.h>
int main()
{
int num1=100;
int *ptr1, *ptr2;
ptr1=&num1; //ptr1指针指向num1
printf("num1的地址是:%x\n", ptr1);
ptr2=ptr1;
printf("ptr2的地址是:%x\n", ptr2);
return 0;
}
4.比较两个指针是否相等的运算
#include <stdio.h>
int main()
{
int value=10;
int *ptr1, *ptr2;
ptr1=&value; //ptr1指针指向num1
value+=53;
ptr2=&value;
if(ptr1==ptr2)
{
printf("两个指针指向同一个地址.\n");
}
else
{
printf("两个指针指向不同的地址.\n");
}
return 0;
}
5.指向数组的指针
#include <stdio.h>
int main()
{
int data[]={5,10,44,25,15};
int i=0;
int *ptr;
ptr=data; //ptr指向数组第一个元素data[0];
while(i<5)
{
printf("第%d个元素的地址是:%x, 变量值是:%d\n", i+1, ptr, *ptr);
i++;
ptr++;
}
return 0;
}
6.通过指针检查一串字符是否为回文字符
#include <stdio.h>
int main()
{
char name[5]={'M','A','D','A','M'};
char *start, *end;
int flag=1;
start=name;
end=name+4;
while(start<=end)
{
if(*start != *end)
{
flag=0;
}
start++;
end--;
}
if(flag)
{
printf("该字符是回文字符\n");
}
else
{
printf("该文不是回文字符\n");
}
return 0;
}
7.编写一个使指针交换两个数的值。
#include<stdio.h>
void main()
{
int num1=2,num2=5;
int *ptr1,*ptr2;
int temp;
ptr1=&num1;
ptr2=&num2;
temp=*ptr1;
*ptr1=*ptr2;
*ptr2=temp;
printf(" num1=%d/n num2=%d/n",num1,num2);
}
9. 使用指针实现冒泡排序
#include <stdio.h>
#include <stdlib.h>
#define M 20
int main()
{
int arr[M];
int i, j, tmp, *ptr;
for(i=0; i<M; i++)
{
arr[i] = rand()%100;
}
printf("排序前:\n");
for(i=0; i<M; i++)
printf("%d\t", arr[i]);
printf("\n排序后:\n");
for(i=0, ptr=&arr[i]; i<M-1; i++, ptr++)
{
for(j=i+1; j<M; j++)
{
if(*ptr<*(ptr+j-i))
{
tmp=*ptr;
*ptr=*(ptr+j-i);
*(ptr+j-i)=tmp;
}
/*
if(arr[i]>arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
*/
}
}
for(i=0; i<M; i++)
printf("%d\t", arr[i]);
return 0;
}