-
指针变量的声明,赋值分步
#include<stdio.h> int main(){ int a = 1; int *ip; //声明指针变量ip ip = &a; //ip指向a的地址 *ip=2; //更改ip指向地址的值就是更改a的值 printf("%d",a); return 0; }
-
swap函数
#include<stdio.h> void myswap(int* a,int* b){ // 掉用的函数声明在上面,避免出现gcc警告 int tmp = *a; *a = *b; *b=tmp; } int main(){ int a = 1,b = 2; myswap(&a,&b); //传入的是参数的地址 printf("%d",a); //2 printf("%d",b); //1 } ~
-
指针操作数组(比直接操作数组速度快)
#include<stdio.h> int main(){ int arr[] = {1,2,3,4,5}; int *p = arr; //用书组名赋值给指针变量,指针变量指向数组第一个元素 int *q = &arr[1]; printf("%d",*p); //1 printf("%d",*q); //2 printf("%d",*(q+2)); //arr[1]向后2个元素 }
-
strlen的c指针实现
#include<stdio.h> int mystrlen(char *s){ int n=0; for(;*s != ' ';s++){ //字符串是 结尾,字符数组结尾没有 printf("&s: %p char:%c ", s, *s); n++; } return n; } int main(){ char ch[] = {'a','s','d','f'}; //printf("%d ",mystrlen("hello world")); //11 printf("%p ", ch); printf("%d",mystrlen(ch)); //(ch+1)的指针位置就是0x7ffc8427a701,同时,指代0x7ffc8427a701位置后的所有数组元素 } /** 0x7ffc8427a700 // 可以看出,数组名指针变量确实和数组第一个元素的指针位置相同 &s: 0x7ffc8427a700 char:a &s: 0x7ffc8427a701 char:s &s: 0x7ffc8427a702 char:d &s: 0x7ffc8427a703 char:f &s: 0x7ffc8427a704 char:� &s: 0x7ffc8427a705 char: */