int a = 10;
int b = 20;
//常量指针
const int * p1 = &a; //这里针对的是常量。 也就是a 的值不能修改。
// * p1 = 20; 这个就是错误的。
// p1 = &b; // 这就是对的。地址可以修改。
//指针常量
int * const p2 = &b;
* p2 = 30;//正确的。 可以对值进行修改。
// p2 = &a; //这个错误的。因为是指针常量,不能修改。
const int * const p3 = &a;//即是常量指针也是指针常量。都不能进行二次修改。
int arr[] = {1,2,3,4,5,6,7,8};
int * p = arr;//arr 就是数组的首地址
cout << "第一个元素:"<<*p << endl;
for (int i=0;i<sizeof (arr)/sizeof (*p);i++){//通过指针遍历数组
cout<<*p<<endl;
p++;
}
//通过指针(地址传递)来进行两个数进行交换。
int a = 10;
int b = 20;
//地址传递,在函数里面进行了地址从新赋值。
swap1(&a,&b);
cout << a << "," << b << endl;
void swap1(int * x,int * y){
int temp = *x;
*x = *y;
*y = temp;
}
```cpp
//定义一个数组,采用冒泡排序法来排序,用到了指针。
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int len = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len);
printArray(arr, len);
void printArray(int *arr, int len) {
for (int i = 0; i < len; i++) {
cout << arr[i] << endl;
}
}
//排序算法函数
void bubbleSort(int *arr, int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```cpp
struct Sdudent{
string name;
int age;
int scores;
}student; // 这里定义的时候就创建了student 变量。
//结构体,自定义数据类型。
struct Sdudent s1; //定义方式1 struct 关键字可以省略
s1.name = "张三";
s1.age = 20;
s1.scores = 100;
struct Sdudent s2 = {"李四",30,90};//定义方式2 关键字可以省略
student.name = "王五"; // 定义结构体的时候,就创建了student的变量。
student.age = 40;
student.scores = 70;
//结构体数组,以及遍历。
struct Sdudent arr[] = {
{"张三",10,30},
{"李四",20,40},
{"王五",30,50},
};
arr[2].name = "zane";
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){
cout << arr[i].name << "," << arr[i].age << "," << arr[i].scores << endl;
}