#include <stdio.h>
/*
1、使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所有我们可以改变里面的字符
当把一个字符串常量赋值一个字符数组的时候,那么它会把字符串常量中的没有字符都放到字符数组里面
2、使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符
*/
int main()
{
// 1、使用字符数组
char names[] = "frjj";
names[0] = 's';
names[1] = 'x';
printf("%s\n",names);
printf("names = %p\n",names);
// 2、使用指针变量
const char *name = "frjj";
printf("name = %p\n",name);
{
// 1、const修饰普通变量,在定义普通变量的时候,在普通变量名称前面加上const说明这个变量是只读的
const int a = 10;
int const b = 20;
// 2、const修饰指针变量
// 1、如果const在*前面的,说明指针所指向的存储空间的是只读的,我们不可以修改指针所指向的存储空间
int c = 10;
// const int *p = &c;
int const *p = &c;
// 2、如果const在*后面的说明,这个指针变量本身是只读的,那么就不可以修改这个指针的指向
int * const pp = &c;
return 0;
}
int test1()
{
// 指向数组的指针:它是一个指针,这个指针用来指向数组的
int nums[3][3] = {{1,3,5},{2,4,8},{11,1,2}};
int ns[] = {1,2};
// 怎么定义一个指向数组的指针
// 1、定义一个这样的数组
// 2、给数组名加上一个括号
// 3、在数组名称前面加上一个*
int (*np)[3];
np = nums;
// 1、它可以使用二维数组访问里面元素的方式去访问
printf("%d\n",np[1][2]);
// 2、通过指针的方式
printf("%d\n",*(*(np+1)+2));
return 0;
}
void test()
{
// 指针数组:存放指针数组
int nums[5];
int a =10;
int b = 20;
int c = 30;
int *numsp[3] = {&a,&b,&c};
int len = sizeof(numsp) / sizeof(int *);
// for (int i =0; i < len; i++) {
// printf("%d\n",(*numsp[i])++);
// }
*numsp[0] = 60;
printf("a = %d\n",a);
*numsp[0] = *numsp[0] + 1;
(*numsp[0])++;
printf("a = %d\n",a);
}