1 指针与自加
#include<stdio.h>
int main(){
int a[] = {1, 4, 7, 8, 9};
int *p = a;
printf("%d\n", (*p)++);
printf("%d\n", *p++);
printf("%d\n", *p++);
printf("%d\n", *p);
return 0;
}
输出
1
2
4
7
printf("%d\n", *p++);
中,++与*
的优先级一致,结合方向是从右到左,但这里并不是先执行++,这里的++表示对p进行自加,而非对*p
自加
2 不能用指针试图改变字符串常量的值
下面的程序会报错
#include<stdio.h>
int main(){
char *p = "abc";
p[1] = 'A';
printf("%s\n", p);
return 0;
}
3 给字符常量赋值
char *s = "AAA";
s[0] = 'B';
printf("%s", s);
上述代码能编译,但不能运行,通过字符指针给对应的原值赋值时,要注意指针是指向字符串常量还是字符数组。之所以能通过编译,是因为编译器不够智能,发现不了这种错误。