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的数据类型是 *指针类型。
字符串的数据类型内存布局如下所示:
标签:数组,strr,列表,str,printf,字符串,C语言,buf
来源: https://blog.csdn.net/qq_39982235/article/details/88618101