C++快速笔记 7 指针
  TEZNKK3IfmPf 2023年11月15日 31 0

7. 指针

7.1 指针的概念

通过指针访问内存。

7.2 指针变量的定义和使用

数据类型 * 变量名;

e:

int a = 10;
int * p;
p = &a; //p指向变量a的地址

// 使用指针访问内存
cout <<"*p=" << *p << endl;

7.3 指针所占内存空间

指针存储的是内存地址。 所以,如果计算机是64位的(用64位表示内存),指针的大小就是64位(8个字节)

可以用sizeof查看。

7.4 空指针和野指针

空指针: 指向内存0的指针。一般用于初始化。int *p = NULL;这个位置是系统保护的,用户无法读写。 如果试图写入数据,如*p=1。会引起错误。

野指针:指向不确定的内存。

const 修饰指针

  1. 常量的指针const int * p = &a指针p指向一个常量a,不能用p修改a。

int a = 10;
int b = 10;
const int * p1 = &a;
p1 = &b; //正确
*p1 = 100; // 报错
  1. 指向不变的指针

int * const p2 = &a;
p2 = &b // 错误

p2指向a后不能在指向其它位置。

  1. 两个都不能改

const int * const p3 = &a;

这个很好记,看const离谁近, 离int近,就是这个int是常量, 里p近,就是p是常量。

7.6 指针和数组

用指针访问数组。

int arr[] = {1,2,3,4,5,6,7,8,9,10};

int * p = arr;

for (int i=0; i < 10; i++) {
    cout << *p << endl;
    p++;
}

p++会让指针根据元素类型,计算下一个元素的内存地址。

7.7 指针和函数

指针作为函数参数,可以修改实参的值。 (因为传入了内存地址,函数可以修改这个地址上的数据)

int swap2(int * p1, int * p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

7.8 指针、数组、函数

e: 实现冒泡排序函数,对整型数组升序排序。

void bubble_sort(int * arr, int len)//int * arr 也可以写为 int arr[]
{
    for (int i=0; i < len-1; i++) {
        for (int j=0; j < len -1 -i; j++){
            if arr[j] > arr[j+1] {
                swap2(&arr[j], &arr[j+1])
            }

        }
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   19天前   26   0   0 C++
  TEZNKK3IfmPf   19天前   22   0   0 指针C++
  TEZNKK3IfmPf   2024年05月31日   23   0   0 算法C++
TEZNKK3IfmPf