指针和字符串
字符常量有内存,可以取地址
C语言的字符串都是char * 类型
无法通过指针改变字符常量的值,只能通过重定向位置进行不同数据的指向
C语言中字符常量都是固定地址的
char *s1 = "abc";
char *s2 = "abc";
printf("%d\n%d\n",s1,s2);
上面的指针s1、s2指向同一个地址
指针数组
指针数组与普通数组的优缺点
普通数组定义语法,优缺点
// 普通数组定义语法,优缺点
//第一种定义方式
int arr[] = {1,2,3,2,1};
//第二种定义方式
int a=1;
int b=2;
int arr1[] = {a,b};
// 该数组里面存放的是拷贝的a、b值,修改数组里面的内容,不会影响a、b的值
// 优点:数据独立 缺点:数组能力较弱,无法修改变量的值;在数据较大时,每次都会进行数值拷贝,效率较低
指针数组、优缺点
优点:可以通过数组元素,修改外部变量;存储数据的地址只需要拷贝大小的数据
缺点:能力过强,数组数据与外部数据关系太紧密,如果外部数据内存被释放,数组中的指针就会变成野指针
指针数组的定义
指针数组中每一个元素都是指针
int a=10;
int b=20;
int c=30;
int * arr1[] = {&a,&b,&c};
通过指针数据修改变量
int a=10;
int b=20;
int c=30;
int * arr1[] = {&a,&b,&c};
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
int len = sizeof(arr1) / sizeof(arr1[0]);
int i;
for(i=0;i<len;i++){
*(arr1[i]) +=100;
}
printf("----------------------\n");
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
字符串数组的定义
char * names[] = {"川建国","奥观海","拜振华"};
字符串数组的遍历
int i;
int len = sizeof(names) / sizeof(names[0]);
for(i=0;i<len;i++)
{
printf("%s\n",names[i]);
}
const
为了限制某些变量不可修改,从语法上进行限定