对于一级指针的总结
一、 什么是指针
指针就是地址,利用地址,它的值直接指向存放在电脑存储器中另一个地方的值,由于通过地址可以找到所需的变量单元,所以将地址形象化的称为“指针”
int main()
{
int a = 1;
int *p = &a;
return 0;
}
二、指针加减整数
指针p加一个整数n表示的是指针所指向的之后的第n个元素地址,加减整数是按照单元格移动。
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n[2] = { 1,2 };
int* p = n;
printf("%d\n", n[1]);
printf("%d\n", *p);
printf("%d\n", *(p + 1));
return 0;
}
三、指针解引用
定义了一个指向int类型指针p,并初始化p使其指向int类型的变量num,这里&num中的&是取地址操作符,当&作用于一个对象上时,它返回了该对象的地址。
所以这里指针p指向了num所对应的地址。
#include<stdio.h>
int main(void)
{
int num = 10;
int *p = #
printf("%d 的地址是 %p\n", num, p);
return 0;
}
*操作符为解引用操作符,它返回指针p所指的对象。
我们可以对*p赋值,从而改变p所指的地址上所保存的值,从而改变此地址所存储的变量num的值。
#include<stdio.h>
int main(void)
{
int num = 10;
int* p = #
printf("%d\n", num);
*p = 100;
printf("%d\n", num);
return 0;
}
四、指针与const结合
int a=10;
int b=20;
const int* p = &a;
在这种定义方式下,不允许通过解引用对a的值进行修改,但是可以对指针p所指向的元素进行修改:
例如:
*p = 10; //error
p = &b; //right
int const p = &a;
在这种定义方式下,不允许对指针p所指向的元素进行修改,但是可以通过解引用p对a的值进行修改:
例如:
*p = 10; //right
p = &b;//error
const int a = 10; // 常变量
在这种定义方式之下,不仅对指针所指向的元素进行修改,而且不能通过指针对所指向元素的值进行修改。
例如:
int* q = &a; //error
*q = 20;//error