#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;
}