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\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,最后指针会指向最后元素。
}
}
数组与指针小结
数组名就是这块连续内存单元的首地址
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; //重置指针
感谢您的阅读,您的支持是我写博客动力。