c语言列表中的元素是字符串,C语言中的数组、字符串列表

C语言中的数组与指针

定义一般数组

1、定义一个数组,一般想要获取的信息是,数组的某个元素的地址以及该地址内存储的内容。

比如定义一个字符串类型的数组变量,对其进行赋值:

1 #include

2

3 int main()

4 {

5 char buf[20]="beijing huanying"; //定义、赋值

6

7 printf("%s\n",buf); //输出buf数组的字符串

8 printf("%p\n",buf); //输出buf数组的首地址

9 printf("%p\n",buf+1); //输出buf数组第二个元素的地址

10

11 printf("%c\n",buf[1]); //输出buf数组第2~5个元素的存储内容

12 printf("%c\n",buf[2]);

13 printf("%c\n",buf[3]);

14 printf("%c\n",buf[4]);

15

16 printf("%p\n",&buf[1]); //输出buf数组第2~5个元素的地址

17 printf("%p\n",&buf[2]);

18 printf("%p\n",&buf[3]);

19 printf("%p\n",&buf[4]);

运行结果如下所示:

beijing huanying //buf数组的字符串

0xbfa4de18 //buf数组的首地址

0xbfa4de19 //输出buf数组第二个元素的地址

e //输出buf数组第2~5个元素的存储内容

i

j

i

0xbfa4de19 //输出buf数组第2~5个元素的地址

0xbfa4de1a

0xbfa4de1b

0xbfa4de1c

以上运行结果可以推出下述几个结论:

1、buf代表数组的首地址,也是数组第一个元素的地址。

2、printf("%s\n",buf); 的运行结果是 beijing huanying,证明可以通过数组名输出数组的内容。

3、printf("%p\n",buf+1); 的运行结果是 0xbfa4de19,比首地址增加了1个字节,即一个char类型的长度

4、printf("%c\n",buf[1]); 输出某一元素所代表的内容,==printf("%p\n",&buf[1]);==打印该元素的地址。

定义字符串列表

1、字符串列表用于存储一个字符串里每个元素的地址,该地址指向某一个数据类型的内存单元,这个内存单元里存储着一个数据类型的值。举例如下:

1 #include

2

3 int main()

4 {

5 char *str[3]; //定义一个字符串变量

6 char strr[3]="127"; //定义一个字符串数组

7

8 *str=&strr[0]; //把字符串数组的首地址

9 赋值给字符串变量

10 printf("%p\n",&strr[0]); //字符串数组三个元素的地址

11 printf("%p\n",&strr[1]);

12 printf("%p\n",&strr[2]);

13

14 printf("%c\n",strr[0]); //字符串数组三个元素值

15 printf("%c\n",strr[1]);

16 printf("%c\n",strr[2]);

17

18 printf("%p\n",*str); //字符串变量的三个元素

19 printf("%p\n",*str+1);

20 printf("%p\n",*str+2);

21

22 printf("%c\n",*(*str)); //字符串变量的三个元素指向的

23 printf("%c\n",*(*str+1));

24 printf("%c\n",*(*str+2));

25

26 return 0;

27

28 }

运行结果:

0xbfeefda9

0xbfeefdaa

0xbfeefdab

1

2

7

0xbfeefda9

0xbfeefdaa

0xbfeefdab

1

2

7

以上运行结果可以得出如下结论:

1、 * str+i = &strr [ i ]

2、 * (*str+i) = strr [ i ]

3、对于数组strr来说,内存分配了3个字符串的长度,即3×1个字节。

1)若是定义的char strr[30],内存分配30×1个字节长度

2)若是定义的int strr[30],内存分配30×4个字节长度

4、对于指针变量 *str来说,内存分配了4份个字节的长度,一个指针是32个bite位即4个字节,用来存储地址。

1)若是定义的char *str[30],内存分配4个字节长度给 *str,内存分配30×1个字节长度给str;即 * str的数据类型是 *指针类型。

2)若是定义的int *str[30],内存分配4个字节长度 *str, 内存分配30×4个字节长度给str;即 * str的数据类型是 *指针类型。

字符串的数据类型内存布局如下所示:

edd0da06661fb99f16523286f1535b84.png

标签:数组,strr,列表,str,printf,字符串,C语言,buf

来源: https://blog.csdn.net/qq_39982235/article/details/88618101

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值