C语言二级字符串指针的使用(函数传参/长度获取/空间分配)

您所在的位置:网站首页 二级指针引用 C语言二级字符串指针的使用(函数传参/长度获取/空间分配)

C语言二级字符串指针的使用(函数传参/长度获取/空间分配)

2024-07-11 15:29| 来源: 网络整理| 查看: 265

文章首发及后续更新:http://mwhls.top/619.html 新的更新内容请到mwhls.top查看。 如果没有图片请到上方的文章首发页面查看。

被整型数组的sizeof误导,我二级指针的空间分配一直出现问题,今天(和今天的明天)终于解决了!

还有如何将字符串数组的传参问题!

我!

墙!

啊!

概念

指针用来指向地址,例如int *p = #表示用 int型的p指针 存放 num的地址。

而二级指针,int *q = &p;表示用 q 存放 p 的地址。注意这里的&p,如果写成p,那么只是q依然只是一级指针,将指向num的地址。此时的等价关系:

p == # *p == num; q == &p; *q == p; *q == p == # **q == *p == num; 函数传参

想要将一个二维字符串数组传入函数,那么在定义时,需用格式:char *strs[] = {"str1", "str2"};

中括号[]内不用写大小,就如同一维数组一样。

对于一个传入二级指针的函数char *putFirstChar(char **charArray);在传参时,直接使用变量名作为实参即可,即putFirstChar(strs);

这样,在函数内部调用时,就可以使用strs[0][0];形式了。

我试过使用char **strs1, strs2[3][3], strs3[3][];,三种都不行。

长度获取

一维整型数组int intArray[10] = {1, 2};,可以使用int arraySize = sizeof(intArray)/sizeof(int);来获取,此时的sizeof(intArray)/sizeof(int) == 10;,而不等于2.

但一维字符串数组char charArray[10] = "12";,需要用strlen(charArray)来获取,此时长度为2,而不等于10。

int i = strlen(charArray);函数的效果和for(int i=0; charArray[i]!='\0'; i++);相同(在for内定义变量可能出错,出错请在for外定义i变量)。

一级字符串指针的空间分配

对于char *charArray;的空间分配,使用charArray = (char*)malloc(sizeof(char)*arrayLength);,其中的arrayLength为整型变量,表示char空间的个数。

重新分配时,使用charArray = (char*)realloc(charArray, (strlen(charArray)+1+addLength) * sizeof(char));函数,表示给charArray变量增加addLength长度的空间。

这里的长度用strlen(charArray)+1,因为字符串的结束符 '\0'也占据空间,这里的长度不能用sizeof()来获取,它无法获取char类型数组的大小。

二级字符串指针的空间分配

这里的内存空间分配好可恶,好可恶好可恶!我有的题分配了空间,一直栈溢出,气死了,我都把倍数调到一百了明明!但是今天做题突然就正常分配了,好气哇!使用到这个分配的在后面第三篇,看这里LeetCode-17-电话号码组合(C)。

按下面的格式进行内存分配即可,分配完后,char2DArray指针可以当做二维数组来用,即使用char2DArray[0][0]这种方式进行赋值。

char **char2DArray; int sizeIn1, sizeIn2, i; char2DArray = (char**)malloc(sizeof(char*) * sizeIn1); for(i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3