ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

log[13]:C语言基础——指针数组(字符型)

log[13]:C语言基础——指针数组(字符型) 一、字符串操作函数可以链式调用char *strcpy(char *dest, const char *src);strcpy(s3,strcpy(s2,strcpy(s1,hello)));1、strncpychar *strncpy(char *dest, const char *src, size_t n)功能将src中前n个字符拷贝到dest中。如果前n个字符中没有‘\0’拷贝后也没有如果n src长度最终要把n次拷完补\0。2、strncatchar *strncat(char *dest, const char *src, size_t n)功能将src中前n个字符拼接到dest中。从 dest 的\0位置开始拷贝如果 n 小于 src长度 则拷贝n次结束最后加\0如果 n 大于 src长度 则将src拷贝完即可最后加\03、strncmpint strncmp(const char *s1, const char *s2, size_t n)功能比较s1与s2的前n个字符。4、memcpyvoid *memcpy(void *dest, const void *src, size_t n);功能:将src空间上n个字节的数据拷贝到dest所指向的空间其中n表示拷贝的字节void * 万能指针可以接收任意类型的地址一般用于形参的设计二、指针操作二维数组1、整形二维数组int a[3][4] {1,2,3,4,5,6,7,8,9,10};二维数组的本质一维数组的一维数组int a[3][4] int[4] a[3]; 即数组a[3]的类型是int[4]故要定义一个指针指向a[3],指针类型应为int[4] * ,其正确写法为int (*p) [4] a[0];a[i][j] *(*(pi)j)2、字符型二维数组栈存放多个字符串char s[5][10] {hello,world,english,china,america};与整型二维数组类似char(*p)[10] s通过指针变量p想访问到字符串实际上就是要通过p得到字符串首元素的地址(因为字符串在内存中也是按照数组的方式存放的获得首元素地址就可以获得到整个字符串)3、字符型二维数组字符串常量区不同于栈上访问字符串常量区的访问为只读。char * s1 hello1; char * s2 hello2; char * s3 hello3; char * s4 hello4;此时s1,s2,s3,s4的数据为char *。故数组可定义为char *s[5];来存放s1,s2,s3,s4中各字符串的首地址。此时s[0] char *代表数组第0个元素的值即s1的地址s[0] char **代表数组第0个元素的地址即s[0] 这个指针变量的地址在函数中调用主函数中的地址数组需要二级指针接收:char* *p;二级数组用来保存一级指针变量的地址此时,p存放的是一个一级指针变量的地址*p (char *)解引用一次取出p所指向的那个一级指针的值等价于s[0] 是字符串s1的首地址**p(char**)接应用两次先取出字符串的首地址再取出该地址上的字符串等价于s[0][0]即‘h’
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进