指针:指针是一个变量,用来存放内存地址的变量。
两个有关的运算符:*号有两个作用
1. &:取地址运算符。
2. *:声明指针变量。
3. *:取值运算符。对某个指针变量做*操作,表示取该指针指向地址中的值。
C语言中提供了地址运算符&来表示变量的地址。其一般形式为:&变量名;
如&a表示变量a的地址,&b表示变量b的地址。变量本身必须预先说明。
1. &:取地址运算符
int num = 10;
int *ptr_num = &num //声明指针变量
2. *:声明指针变量
int num = 10;
int *ptr_num; //声明指针变量
ptr_num = &num //指针变量赋值。&是取地址运算符
3. *:取值运算符
int num = 10;
int *ptr_num; //声明指针变量
ptr_num = &num //指针变量赋值。&是取地址运算符
num = *ptr_num //对指针变量做*操作,表示取该指针指向地址中的值
4. **:二级指针变量,指向指针的指针。指针指向另一个指针的内存地址。
int a=10; // 定义一个int型变量a
int *p; // 定义一个int类型的一级指针变量p
int **t; // 定义一个int类型的二级指针变量t
p = &a; // 使一级指针p指向变量a的地址
t = &p; // 使二级指针t指向一级指针变量p的地址
printf("%d", a); // 输出10
printf("%d", *p); // 输出10
printf("%d", **t); // 输出10
5、指针和数组
int main(){
//数组名就是数组的首地址
double score[] = {19,20,35,88,66};
double *prt_score = score; //指针的声明和赋值。score是数组首地址。
printf("数组的首地址:%p\t数组首元素的地址:%p\n",score,&score[0]);
int size = sizeof(score) / sizeof(score[0]);
for(int i = 0; i < size; i++){
//printf("%.2lf\n",ptr_score[i]); //指针不会发生变化
printf("%.2lf\n",*(ptr_score + i)); //指针不会发生变化。通过取值运算符,获取数组的值。
//printf("%.2lf\n",*ptr_score++); //指针发生变化。每运行一次指针加1,最后指针会指向最后元素。
}
}
原文:http://www.cnblogs.com/chenweichu/p/6444689.html