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 修饰指针有三种情况:
1.const修饰指针 -- 常量指针
2.const修饰常量-- 指针常量
3.cont 即修饰指针又修饰常量
const int *p = &a;
特点:指针的指向可遇记修改,但是指针指向的值不可以修改
int * const p = &a;
特点 指针指向不可以改 但是指针指向的值可以修改
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;
}