e.g.1
#include<stdio.h> int main() { int* a; int b=100; a=&b;//&是取地址符号,此时a指向 printf("%d\n",b); *a=1000;//*a表示指向的内容 printf("%d\n",b); printf("%d\n",a);//所指向的首地址 } 100 1000 6487572e.g.2
printf("%d\n",*a); printf("%d\n",*(a+1));//从指向首地址,变为指向第二个地址 printf("%d\n",a,a+1);//指针变量,改变字节,int:四个字节。+4P.S. : *a和a都指向首地址,前者给出首地址元素的值,后者给出内存。 如果a是指针变量,b是一个数,则传值需要用:a=&b; 而如果,b也是指针变量,如b[10]:a=b;
#include<stdio.h> int main() { char a; printf("%d",sizeof(a)); return 0; } 1 #include<stdio.h> int main() { char* a; printf("%d",sizeof(a)); return 0; } 8 --------------------------------3.交换两个指针的值
#include<stdio.h> int main() { int* a; int* b; int x; int c=10; int d=20; a= &c; b= &d; x=*a; *a=*b; *b=x; printf("%d,",*a); printf("%d",*b); return 0; } 20,10 &传值也传址 #include<stdio.h> void fu(int* b) { *b=10000; } int main() { int a=10; fu(&a); printf("%d",a); return 0; } 10000但如果不加&,则传值不改变原变量的值。 如a=5; b=a; b=10; 此时的a值还是5.
#include<stdio.h> void fu(int b) { b=10000; } int main() { int a=10; fu(a);//此处是将a的值赋给b printf("%d",a); return 0; } 10 用指针定义数组 #include<stdio.h> int main() { int b[10]; int *p=b;//用指针定义数组,p指向b的首地址 for(int i=0;i<10;i++) { *(p+i)=i;//由于前面已经指向b,故p的每一个位置也都指向b的对应位置。即借助指针将i赋值给b } for(int j=0;j<10;j++) { printf("%d\n",b[j]); } return 0; } 0 1 2 3 4 5 6 7 8 9