char *
char str[] = “Hello, World!”;
char* ptr = str; // 指向字符数组的首地址
常用指针指向一个数组,并可通过指针遍历该数组
while (*ptr != ‘\0’) {
std::cout << *ptr;
ptr++;//这就是往后面取值
}
const char *ptr
const char *ptr 表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。 可以通过其他普通指针对同样地址中的数据进行修改。
注意:普通指针就是指char *ptr,即无const。
char const *ptr
char const *ptr 和 const char *ptr 等价。
区分:
即看const在指针前还是指针后,若在指针前,则表示指针指向的是常量,不可以通过*ptr=‘a’的形式去赋值到ptr指向的值改变该值,但是可以c=a,自己改变,注意这里没有通过指针改变。而若在指针后,则表示该指针为一个常量,即该指针表示的地址为定值,不可以改变指针的指向,可以通过指针赋值改变指针所指地址的值,这与前者相反。
char * const ptr
char * const ptr 表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。
总结
const char *ptr 表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。
char const *ptr 和 const char *ptr 等价。
char * const ptr 表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。
const放在号前表示修饰的是指针指向的对象,const放在号后表示修饰的是指针本身。
所以strcpy(char*,const char*)
中的char表普通指针,const char表示不可以通过该指针去改变指针的值。所以strcpy(s1,s2)中s1必须是字符型数组的基地址,即char*(因为要把s2赋给s1,所以s1必须是一个变量,而不能是一个常量,所以必须能用指针来改变s1的值。而s2可以是字符数组名或字符串常量。
所以其实只需要注意s1定义的数组不可为const char str即可。
补充:在给字符数组赋值时,直接str【10】=“fsfsf”;用双引号即可。
**注意:**strcpy是对字符数组处理的,不可以对整数用哦,整数可用异或运算,a=b=a^=b可以交换a和b的值。