C指针

指针:指针是一个变量,用来存放内存地址的变量。

两个有关的运算符:*号有两个作用

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 数组首元素的地址:%p ",score,&score[0]);

int size = sizeof(score) / sizeof(score[0]);

for(int i = 0; i < size; i++){

//printf("%.2lf ",ptr_score[i]);     //指针不会发生变化

printf("%.2lf ",*(ptr_score + i));  //指针不会发生变化。通过取值运算符,获取数组的值。

//printf("%.2lf ",*ptr_score++);  //指针发生变化。每运行一次指针加1,最后指针会指向最后元素。

}

}

数组与指针小结

数组名就是这块连续内存单元的首地址

int num[50]; //num数组名,也是数组的首地址

num的值与&num[0]的值是相同的

数组第i+1个元素可表示为:

第i+1个元素的地址:&num[i+1] 或 num+i

第i+1个元素的值:num[i+1] 或 *(num+i) 或 *num++ (*num++:指针位置会改变)

为指向数组的指针赋值(指针声明和赋值):

int *ptr_num = num; 或者 int *ptr_num = &num[0];

指针变量可以指向数组元素(指针声明和赋值):

int *ptr_num = &num[4] 或者 int *ptr_num = num + 4

指针自增或自减后,必须重置

*num++;

*num = num; //重置指针

原文地址:https://www.cnblogs.com/chenweichu/p/6444689.html