指针---面试题

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	/*一维数组
	除了sizeof(a)    &a表示整个数组
	其余都表示数组首元素*/
	int a[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));//整个数组的大小                   16
	printf("%d\n", sizeof(a + 0));//a是首元素地址+0还是首元素地址 4
	printf("%d\n", sizeof(*a));//a表示首元素地址,*a首个元素     4
	printf("%d\n", sizeof(a + 1));//a表示首元素地址,a+1表示a[1]的地址
	printf("%d\n", sizeof(a[1]));//4
	printf("%d\n", sizeof(&a));//整个数组地址4
	printf("%d\n", sizeof(*&a));//*和&抵消,a表示整个数组的大小16
	printf("%d\n", sizeof(&a + 1));//数组首元素地址+1表示a[1]的地址 4
	printf("%d\n", sizeof(&a[0]));//首元素地址  4
	printf("%d\n", sizeof(&a[0] + 1));//a[1]的地址4



	char arr[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr));//整个数组的大小  6
	printf("%d\n", sizeof(arr + 0));//数组首元素地址+0等同  4
	printf("%d\n", sizeof(*arr));//arr数组首元素地址 *arr数组首元素 1
	printf("%d\n", sizeof(arr[1]));//arr[1]元素  1
	printf("%d\n", sizeof(&arr));//整个数组地址 4
	printf("%d\n", sizeof(&arr + 1));//地址  4
	printf("%d\n", sizeof(&arr[0] + 1));//地址  4
	printf("%d\n", strlen(arr));//随机值 无\0
	printf("%d\n", strlen(arr + 0));//随机值
	printf("%d\n", strlen(*arr));//err错误  strlen参数是地址*arr是字符a  a的ascll值被当成地址
	printf("%d\n", strlen(arr[1]));//err同上
	printf("%d\n", strlen(&arr));//随机值
	printf("%d\n", strlen(&arr + 1));//随机值
	printf("%d\n", strlen(&arr[0] + 1));//随机值
		/*1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
		2. & 数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
		3. 除此之外所有的数组名都表示首元素的地址。*/


	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));//整个数组大小7
	printf("%d\n", sizeof(arr + 0));//地址 4
	printf("%d\n", sizeof(*arr));//数组首元素1
	printf("%d\n", sizeof(arr[1]));//数组元素1
	printf("%d\n", sizeof(&arr));//整个数组的地址4
	printf("%d\n", sizeof(&arr + 1));//地址 4
	printf("%d\n", sizeof(&arr[0] + 1));//地址 4
	printf("%d\n", strlen(arr));//arr表示整个数组的地址 6
	printf("%d\n", strlen(arr + 0));//数组首元素地址  6
	printf("%d\n", strlen(*arr));//数组首元素 err
	printf("%d\n", strlen(arr[1]));//err
	printf("%d\n", strlen(&arr));//6
	printf("%d\n", strlen(&arr + 1));//5
	printf("%d\n", strlen(&arr[0] + 1));//5
	char* p = "abcdef";
	printf("%d\n", sizeof(p));//地址 4
	printf("%d\n", sizeof(p + 1));//地址 4
	printf("%d\n", sizeof(*p));//1
	printf("%d\n", sizeof(p[0]));//数组首元素 1
	printf("%d\n", sizeof(&p));//4
	printf("%d\n", sizeof(&p + 1));//4
	printf("%d\n", sizeof(&p[0] + 1));//4
	printf("%d\n", strlen(p));// 6
	printf("%d\n", strlen(p + 1));//5
	printf("%d\n", strlen(*p));//err
	printf("%d\n", strlen(p[0]));//err  数组元素的ascll值作为地址
	printf("%d\n", strlen(&p));//随即子
	printf("%d\n", strlen(&p + 1));//随机值
	printf("%d\n", strlen(&p[0] + 1));//随机值
	/*二维数组*/
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));//整个数组的大小  48
	printf("%d\n", sizeof(a[0][0]));//元素大小4
	printf("%d\n", sizeof(a[0]));//行的大小 16
	printf("%d\n", sizeof(a[0] + 1));//地址a[0][1]的地址  4
	printf("%d\n", sizeof(*(a[0] + 1)));//元素大小  4
	printf("%d\n", sizeof(a + 1));//a[1]地址 4  
	printf("%d\n", sizeof(*(a + 1)));//a[1]的整行大小16 
	printf("%d\n", sizeof(&a[0] + 1));//  地址 4
	printf("%d\n", sizeof(*(&a[0] + 1)));//a[1] 16
	printf("%d\n", sizeof(*a));//a表示数组首元素a[0]的地址 *a表示a[0]   a[0]表示首行   16 
	printf("%d\n", sizeof(a[3]));//16
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值