study c(vc中测试过)——指针

本文深入探讨了C语言中指针的基本概念与高级应用,包括指针定义、使用方法、数组指针操作、字符串指针处理及函数指针等。通过具体示例展示了如何运用指针实现内存地址操作,进行数据交换、字符串复制与排序等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"

int swap(int a,int b)
{
 return 101; 
}

void swap(int *p1,int *p2)

{
 int temp ;

 temp=*p1;

 *p1=*p2;

 *p2=temp;

}

int main_pointer(){
 //指针基本定义和使用
 puts("start pointer");
 int aint=100;
 int *pointera;
 pointera = &aint;
 printf("%d,%d,%d,%d,%d/n",*pointera,pointera,&pointera,*(*&pointera),*(&*pointera));

 
 int a=100,b=200;
 int *pointer_1,*pointer_2;
 //scanf("%d,%d",&a,&b);
 pointer_1=&a;pointer_2=&b;
 if(a<b) swap(pointer_1,pointer_2);
 printf("/n%d,%d/n",a,b);


 int ta=5,*p=&ta;//此处*为指针说明符号,声明时用一次
 printf("*p=%d/n",*p);//此处*为指针取值符号

 //赋值方法
 //1声明后赋值
 int a1,*p1;
 p1=&a1;
 //2声明时赋值
 int a2,*p2=&a2,*p22;
 p22 = p2;
 //3数组指针
 int a3[5]={1,2,3,4,5},*p3;
 p3 = a3;
 p3 = &a3[0];
 printf("*p3=%d/n",*p3);
 //4字符指针
 char *pc;
 pc = "this is a test";
 char *pc2 = "this is a test2";
 //5函数指针
 int (*fp)(int a,int b);
 int swap(int a,int b);
 fp = swap;
 int result = (*fp)(1,2);
 printf("%d/n",result);

 //指针变量加减运算,只对数组指针有效
 p3++;//指向a3[1]
 printf("*p3=%d/n",*p3);
 p3++;
 int size = p3-&a3[0];
 printf("size=%d/n",size);
 printf("%d,%d/n",p3,&a3[0]);//p3地址和a3首地址差2*4=8
 
 return 0;
}

 

 

 

 

 

 

#include "stdafx.h"
#include <string.h>

void convert(int *p,int length){
 int middle = length/2;
 int temp;
 for(int i=0,j=length-1;i<middle;i++,j--){
  printf("loop i=%d/n",i);
  temp = *(p+i);
  *(p+i) = *(p+j);
  *(p+j)=temp;
 }
}

void strcpy(char *source,char *to){
 while(*to++=*source++){;}
}

void sort(char *orig[],int length){
 char *temp;
 for(int i=0;i<length-1;i++){
  for(int j=i;j<length;j++){
   if(strcmp(orig[i],orig[j])>0){
    temp = orig[i];
    orig[i] = orig[j];
    orig[j] = temp;
   }
  }
 }
}

int main_pointer2(){
 //数组指针
 puts("start pointer2......");
 int a[8] = {1,2,3,4,5,6,7,8};
 convert(a,8);
 for(int i=0;i<8;i++){
  printf("a[%d]=%d/n",i,a[i]);
 }

 //指针数组
 int muti_array[3][4]={{1,2,3,4},{11,22,33,44},{111,222,333,444}};
 int (*as_p)[4];
 as_p=muti_array;
 for(i=0;i<3;i++){
  for(int j=0;j<4;j++){
   printf("a[%d][%d]=%d/n",i,j,*(*(as_p+i)+j));
  }
 }

 //字符串指针变量
 char *source="source string";
 char toarray[100];
 char *to = toarray;
 strcpy(source,to);
 puts(to);
 printf("to=%s/n",to);

 char *p[]={"japanese","chinese","spanish","american"};
 sort(p,4);
 for(i=0;i<4;i++){
  printf("%d=%s/n",i,*(p+i));//p[i]也可
 }

 //指向指针的指针
 char **pp;
 for(i=0;i<4;i++){
  pp=p+i;
  printf("%s/n",*pp);
 }

 //指针数组的元素只能存放地址
 static int as_int[4] = {11,22,33,44};
 int *int_p[] = {&as_int[0],&as_int[1],&as_int[2],&as_int[3]};
 int **pp2;
 pp2=int_p;
 for(i=0;i<4;i++){
  printf("%d=%d/n",i,**pp2);
  pp2++;
 }

 return 0;
}

 

 

 

 

 

 

 

 

 

 

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void change(char **orig){
 *orig = (char*)malloc(100);
}

void change(int *orig){
 *orig=22;//修改orig指向地址的变量值,从而修改实参
 printf("orig first address=%d,sizeof orig=%d/n",*orig,sizeof(orig));//指针地址是四位
}

void change(char *orig){
 puts(orig);
 
 orig="wwww";//orig存放的是实参首地址,这里把形参orig指针修改为"wwww"的首地址,但不能修改实参的值
 //*orig="xx";
 printf("orig first address=%d,sizeof orig=%d,*orig=%d/n",orig,sizeof(orig),*orig);//指针地址是四位
 //*orig代表第一个char字符w的十进制值119

 puts(orig);

 char destarr[10];
 char *dest = destarr;
 while(*dest++=*orig++){;}
}

int main(int argv,char* arg[]){
 printf("start main....../n");
 int a = 2;
 int *orig_int=&a;
 char orig_str[10] = "ssssssss";
 change(orig_int);
 change(orig_str);

 printf("orig=%d/n",*orig_int);
 printf("orig=%s,sizeof orig=%d/n",orig_str,sizeof(orig_str));//数组字节长度
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值