一.一级指针
1.int *p,*p2;
p是变量名,*表明是指针,指针指向地址。
在定义时初始化,如int *p_2 = &b; //定义一个指针,指针指向一个地址
先定义再初始化,如int *p1; p1 = &a;//定义了一个指针,用这个变量名去赋值
*p1是p1所指向的变量的值
为a赋值
#include <stdio.h> int m = 3; void usepo(int *a){ *a=2;//输出a=2 *a =m;//输出a=3 a=&m;//输出a=0 ? } int main(){ int a; usepo(&a); printf("%d",a); }
用指针交换两个数的值
void swap(int *xx,int *yy){ int *temp; temp=xx; xx=yy; yy=temp; }/*主函数中用swap(&x,&y)调用*/
失败,因为虽然参数是指针,但是作为参数的指针是临时复制的,在函数里互换操作的是临时指针而不是指针指向的内容
只是在子函数里创建了两个数的副本,仍没有改变源数。
void swap(int xx,int yy){
int temp;
temp=xx;
xx=yy;
yy=temp;
}/*主函数中用swap(x,y)调用*/
和这种调用本质一样
成功改变数的值
void swap(int *xx,int *yy) { int temp; temp=*xx; *xx=*yy; *yy=temp; }
2.与数组相关
#include <stdio.h> void usepo(int *a){ for(int i=0;i<10;i++){ a[i]=i; //或*(a+i)=i; } } int main(){ int a[10]; //a=&a[0](数组首地址),&a=int (*)[10](数组地址) usepo(a); for(int i=0;i<10;i++) printf("%d ",a[i]); } //正常输出0 1 2 3 4 5 6 7 8 9
一个错误的示范
用指针创建动态数组,需要分配空间。 一维数组 int *p; p = (int*)malloc(m*(sizeof(int)));//动态申请内存
二维数组
int **p;
p = (int**)malloc(m*(sizeof(int*)));//二级指针所在地址申请内存
int i, j; for (i = 0; i<m; i++)
p[i] = (int*)malloc(sizeof(int)*n);//一级指针所在地址申请内存
原文:https://www.cnblogs.com/SeasonBubble/p/10725683.html