指针
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 <iostream>
#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 <iostream>
/// 值传递 不能修改实参
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 <iostream>
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;
}