指针用于 存放内存单元地址
指针赋值
int *p;//*声明指针
int a;
int *ptr=&a;//&取地址,&作为参数传入函数的时候是引用
指针与数组
数组名实际上是一个不能被赋值的指针(指针常量)
ptr是地址 arry是数组的首地址 所以等价于int *ptr ptr=array
int array[]={1,9,9,8,0,8,22};//七个元素
int *ptr=array;//声明指针的时候指向数组第一个元素的地址 也等价于int *ptr;ptr=array;
2.将一个指针赋值给另一个指针
int *p1,*p2;
int i=1,j=2;
p1=&i;
p2=&j;
*p1=*p2;
可以看出*p1 *p2代表的是地址的内容 *p1=*p2 将p2地址的值(该地址存放的值比如1 2 3 45 6等)赋值给p1
3
int *p1,*p2;
int i=1,j=2;
p1=&i; p2=&j ;
*p1=*p2 ; //此时的*p1就是i *p2就是j
改变的是:p1所指向的地址中的值!
如果修改p1的地址,则应该是:p1=p2 ;
PS: *是引用地址数据运算符,其后只能跟指针变量,表示引用地址中的数据
#include <stdio.h>
int printf11(void);
int printf22(void);
int printf33(void);
//定义结构体
typedef struct
{
int a;
char b[10];
int (*printf1)(void);
int (*printf2)(void);
int (*printf3)(void);
/* data */
}hanshu;
int printf11(void)
{
printf("hanshu1\n");
return 0;
}
int printf22(void)
{
printf("hanshu2\n");
return 0;
}
int printf33(void)
{
printf("hanshu3\n");
return 0;
}
int main()
{
char c[10]="liu taozhu";
char* f;
f=c;
int array[]={1,9,9,8,0,8,22};//七个元素
int *ptr=array;//声明指针的时候指向数组第一个元素的地址 也等价于int *ptr;ptr=array;
char d='q';
char *p;
p=&d;
//初始化结构体
hanshu ltz=
{
10,
"ltz",
printf11,
printf22,
printf33
};
printf("array %d\n",*ptr);
printf(" %c\n",c[0]);
printf(" %c\n",c[1]);
printf(" %c\n",c[2]);
printf(" %c\n",c[3]);
printf(" %d\n",ltz.a);
printf("%s\n",c);
printf(" *p=%c\n",*p);
printf("*f=%c\n",*f);
printf(" d=%c\n",d);
printf( "%s\n",ltz.b);
ltz.printf1();
ltz.printf2();
ltz.printf3();
return 0;
}
array 1
l
i
u
10
liu taozhua
*p=q
*f=l
d=q
ltz
hanshu1
hanshu2
hanshu3
printf("*f=%c\n",*f); 如果使用%s 会报错 只能%c 指针指向首地址 打印首地址的字符
但是printf("*f=%s\n",f);可以打印整串字符串