c++ 语法指针

指针

1.指针就是一个地址 

2. 指针本身也是有地址的

3.取指针所指向的地址保存的值 用变量名取

4.取指针所指向地址保存的值 *+变量名取(解引用)

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    // 指针定义
    int a =  10;
    // 指针定义的语法: 数据类型 *指针变量
    int *p;
    //让指针记录变量a的地址
    p = &a;
    std::cout << "a 的地址为" << &a << " p的地址为=" << &p << " p保存的值为" << p << " 取p所指向地址保存的值" << *p << std::endl;
    /// 32位4个字节 64位8个字节
    std::cout << "指针占用空间" << sizeof(p) << std::endl;

    return 0;
}

空指针野指针

空指针

1.指针变量指向内存中编号为0的空间

2.用途 初始化指针变量

3.注意 空指针指向的内存是不可访问的

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    int *p = NULL;
    std::cout << *p << std::endl;
    
    return 0;
}

野指针

野指针指向非法的内存空间

/// 野指针 避免使用野指针
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    int *p = (int *)0x1100;
    std::cout << *p << std::endl;
    
    return 0;
}

const修饰指针

const 修饰指针有三种情况:

1.const修饰指针 -- 常量指针

2.const修饰常量-- 指针常量

3.cont 即修饰指针又修饰常量

常量指针

const int *p = &a;

特点:指针的指向可遇记修改,但是指针指向的值不可以修改

 

指针常量

int * const p = &a;

特点 指针指向不可以改 但是指针指向的值可以修改

cont 即修饰指针又修饰常量

const int * const p = &a;

特点 指针指向和指针指向的值都不能修改

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    
    int a = 10;
    int b = 20;

    //常量指针
    const int  *p = &a;
    p = &b;
    // 错误示范 因为const 修饰的是 *p 因此*p不能修改
    // *p = 20;
    int const *p3 = &a;
//    *p3 = b;
    p3 = &b;
    std::cout << "*p3" << *p3 << std::endl;
    //指针常量
    int * const p1 = &a;
    *p1 = b;
    // 错误示范 因为const修饰的是指针  所以指针变量的值不能修改 但是指针变量所指向的值可以修改
    //p1 = &b;
    const int * const p2 = &a;
    // const 即修饰指针 也修饰 常量 所以都不能修改
//    p2 = &b;
//    p2 = *b;
    
    return 0;
}

指针和数组

#include 
#include "mathutil.hpp"
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    std::cout << a[0] << std::endl;
    int *p = a;
    std::cout << *p << std::endl;
    *p++; // 这里的++ 加的是指针的步长
    std::cout << *p << std::endl;
    p = a;
    for (int i = 0;  i < 10 ; i++) {
        std::cout << *p << std::endl;
        *p++;
    }
    
    std::cout << sizeof(char *) << std::endl;
    return 0;
}

指针和函数

#include 
/// 值传递 不能修改实参
void swap1(int a, int b) {
    int c = a;
    a = b;
    b = c;
}
/// 地址传递 可修改实参
void swap2(int *a, int *b) {
    int c = *a;
    *a = *b;
    *b = c;
}

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    int a = 10;
    int b = 20;
    swap1(a, b);
    std::cout << a << b << std::endl;
    swap2(&a, &b);
    std::cout << a << b << std::endl;

    return 0;
}

指针数组函数

#include 
void sort(int *array, int len) {
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (array[j] > array[j+1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j+1] = temp;
            }
        }
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    int array[10] = {2,3,4,33,88,21,44,32,6,5};
    int len = sizeof(array) / sizeof(array[0]);
    
    sort(array, len);
    for (int i = 0; i < len; i++) {
        std::cout << "array" << i << "=" << array[i] << std::endl;
    }
    return 0;
}

你可能感兴趣的:(c++,开发语言)