经典用法
定制指针变量*p后, *p和p的区别
*p表示此指针指向的内存地址中存放的内容。
p是一个指针变量的名字,表示此指针变量指向的内存地址。
1. 权限的问题 ()
const int * // 即p可变,*p不可变。const右边接近于int, 只读,不可以写
int* const p //p为const,不能对p赋值,所以p不可变 但是*p可变
2. 函数参数为指针
3. 利用指针打印一个字符串
4. 一个函数通过指针做到返回两个值
5. 同一个编译器下面,一个指针无论指向什么类型的变量,指针占用的空间都是一样的
(所以如果有的变量占用内存空间多的话,利用指针来赋值内存空间效率更高,因为指针占用的内存空间是固定的)
备注:但是类型还是要一致,同类型指针指向同类型变量,否则会报错
6. 指针可以指向整个数组,也可以指向数组当中的某个元素。利用指针遍历数组元素
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<numeric>
#include<iomanip>
#include<math.h>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<stdio.h>
#include<set>
using namespace std;
void function(int* b)//参数是一个指针变量,
{
printf("%d\n", *b);
}
struct student
{
char* name;
int age;
}stu;
void function(student* b)
{
printf("%s\n", b->name);
printf("%d\n", b->age);
}
int sumandminus(int x, int y, int* p)
{
*p = x - y;
return x + y;
}
int main()
{
int a = 10, b = 20;
int* p = &a;
//========================================
p = &b; // 改变指向的权限
*p = 30; // 修改内存的权限
//========================================
const int* cp = &a; // 限制修改权限
//*cp = 100; // error:表达式必须是可修改的左值 修改
cp = &b; // ok.指向
//===========================================================
int* const pa = &a; // 限制指向权限
*pa = 100; // ok.修改
//pa = &b; // error:表达式必须是可修改的左值 指向
//把指针当作一个函数参数
int d = 10;
function(&d);//送进去的是一个变量的地址
/*
输出结果是:10
*/
printf("=============================\n");
//利用指针打印一个字符串
char name[] = "Australia";
printf("%s\n