☰
log[13]:C语言基础——指针数组(字符型)
2026/10/8 6:38:00 网站建设 项目流程

一、字符串操作函数

可以链式调用

char *strcpy(char *dest, const char *src);

strcpy(s3,strcpy(s2,strcpy(s1,"hello")));

1、strncpy

char *strncpy(char *dest, const char *src, size_t n)

功能:将src中前n个字符拷贝到dest中。

如果前n个字符中没有‘\0’,拷贝后也没有;如果n > src长度,最终要把n次拷完,补'\0'。

2、strncat

char *strncat(char *dest, const char *src, size_t n)

功能:将src中前n个字符拼接到dest中。

从 dest 的'\0'位置开始拷贝,如果 n 小于 src长度 ,则拷贝n次结束,最后加\0,如果 n 大于 src长度 ,则将src拷贝完即可,最后加\0

3、strncmp

int strncmp(const char *s1, const char *s2, size_t n)

功能:比较s1与s2的前n个字符。

4、memcpy

void *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] <==> *(*(p+i)+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’

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询