【C语言】指针和数组练习

举报
謓泽 发表于 2023/09/30 16:32:45 2023/09/30
【摘要】 【C语言】指针和数组练习

💥 指针和数组练习

①. sizeof(数组名) - 数组名表示整个数组,计算的是整个数组大小,单位是字节√

②. &数组名 - 数组名表示整个数组,取出的是整个数组的地址√

③. 除此之外所有的数组名都是代表数组首元素的地址√

💥注意:以上在32位平台上是4个字节,如果你是在64位的平台上那就是8个字节了。(在这里我们使用的是32位地址)


🔥 整形数组 - sizeof() 

示例,如下代码所示 👇 

    int a[] = { 1, 2, 3, 4 };
	printf("%d\n",sizeof(a));   //计算整个数组的地址。
	printf("%d\n",sizeof(a+0)); //这个不是单独放在sizeof()的内部,而是把(a+0)给一起放进去了。所以它表示的是首元素的地址。
	printf("%d\n",sizeof(*a));  //*a是数组的第一个元素,所以计算的是第一个元素的大小。
	printf("%d\n",sizeof(a+1)); //(a+1)是计算第二个元素的地址。
	printf("%d\n",sizeof(a[1]));//计算数组下标第二个元素的地址。

	printf("%d\n",sizeof(&a));  //&a,虽然是数组的地址,但是也是地址。所以,sizeof(&a)计算的是一个地址的大小。
	printf("%d\n",sizeof(*&a)); //取出a的地址再进行解引用,指针是能够指向数组的地址。
	printf("%d\n",sizeof(&a+1));//数组后面空间的地址,跳过一个数组地址。
	printf("%d\n", sizeof(&a[0]));//取出第一个元素下标的地址
	printf("%d\n", sizeof(&a[0] + 1));//取出第一个元素下标地址再加1那么就是第二个元素的地址。

编译运行结果👇

16
4
4
4
4

4
16
4
4


🔥 字符数组 - sizeof() 

示例,如下代码所示 👇 

	char arr[] = { 'a','b','c','d','e','f'};
	printf("%d\n", sizeof(arr));//计算整个数组的地址,注意数据类型。
	printf("%d\n", sizeof(arr + 0));//表示首元素的地址,注意字符所占空间大小是1个字节。但是它是地址所以是4个字节
	printf("%d\n", sizeof(*arr));//数组指针进行解引用,找到元素a的地址。
	printf("%d\n", sizeof(arr[1]));//数组名第下标找到第二个字节。
	printf("%d\n", sizeof(&arr));//取地址arr,arr是个地址。
	printf("%d\n", sizeof(&arr + 1));//取出数组arr的地址加1跳过arr数组到‘f’的后面
	printf("%d\n", sizeof(&arr[0] + 1));//取出arr下标第一个地址,再加1找到第二个元素的地址

编译运行结果👇

6
4
1
1
4
4


🔥 求字符串长度 -  strlen()

示例,如下代码所示 👇  字符串长度头文件是#include<string.h>

	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));

编译运行结果👇

随机值

随机值

报错 - 不是合法地址

报错 - 不是合法地址 

随机值

随机值

随机值

💥注意:上列数组是没有'\0',而'\0'是字符串长度的结束标志。


🔥 字符串数组 - sizeof()  

示例,如下代码所示 👇   

	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(arr + 0));//首元素地址加0,还是首元素地址。
	printf("%d\n", sizeof(*arr));//第一个元素'a'进行解引用。
	printf("%d\n", sizeof(arr[1]));
	printf("%d\n", sizeof(&arr));//arr取出的是整个数组的地址,但还是地址。
	printf("%d\n", sizeof(&arr + 1));
	printf("%d\n", sizeof(&arr[0] + 1));

编译运行结果👇

7
4
1
1
4
4

💥注意:这里是字符串数组所以当中是有'\0'!


🔥 字符串数组 - strlen() 

示例,如下代码所示 👇   从起始位置开始遇到'\0'停止

	char arr[] = "abcdef";
	printf("%d\n", strlen(arr));
	printf("%d\n", strlen(arr + 0));
	printf("%d\n", strlen(*arr));
	printf("%d\n", strlen(arr[1]));
	printf("%d\n", strlen(&arr));
	printf("%d\n", strlen(&arr + 1));
	printf("%d\n", strlen(&arr[0] + 1));

编译运行结果👇

6
6
报错 - 不是合法地址
报错 - 不是合法地址
6
随机值
5

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。