指针操作一维字符型数组:
int Puts(const char *s):const char *s//char const *s//char *const s.const 所在的位置不同,限制的对象也不同。
const int *p = &a;表示不能通过*p的方式间接修改a的值。
int const *P = &a;和上面这个其实是等价的。
const 限定对象的原则:就近原则:const离谁近就限定谁
const int *const p = &a;表示p和*p都不能修改。
int *const p = &a;//const限定的是p,表示将限定为只读。也就是p不能修改。
应用:如果不想通过*p方式改变基类型对应的数据。用const int *p ;int const *p
如果指针变量定义好后,不想再指向别的变量,用int *const p
注意:1形参设计为const char *的目的是防止函数中的误操作,好处是可以提前发现问题,可以接受 char *和const char *,提高了参数的适用性。2.实参可是传数组名,也可以传指针变量,也可以时一个字符串常量。
注意:
char s[] = "hello"和char *s = "hello"的区别:第一个表示在栈上开辟数组空间时,将字符串常量区的字符串常量赋值给栈上那片数组空间。第二个写法表示定义一个指针变量指向字符串常量区的那个字符串常量。注意在使用第二种时,在前面加上const 可以保证指针有只读的性质,这与字符串常量区的性质相同。第一种写法可以进行修改操作,而第二种写法只能执行读操作,不能进行修改的操作。
总结:
1.指针操作一维字符型数组
1.1利用指针作为函数参数实现int puts(const char*s):
1.2利用指针作为函数参数实现size_t strlen(const char*s):
1.3利用指针作为函数参数实现strcpy(char *dest,const char *src):
1.4利用指针作为函数参数实现char *strncpy(char *dest,const *src):
1.5利用指针作为函数参数实现char *strcat(char *dest,const char *src):
1.6利用指针作为函数参数实现char *strncat(char *dest,const char *src,size_t n):
2.知识点。
内存拷贝:void *memcpy(void *dest,const void *src,size_t n)
void * :空类型的指针-----万能指针。就是可以接受任意类型的值。
注意:如果用空类型的指针进行间接运算,必须转换成有明确类型的指针。
指针操作二维数组: