动态html做网站背景,做网站广告推广平台,wordpress组成,宝塔软件做网站指针和数组习题 前言#xff1a;一、一维数组二、字符数组三、二维数组四、指针题目 前言#xff1a;
学习了指针的初阶和进阶后#xff0c;已经对指针有了一定了解。下面就需要做题目#xff0c;去巩固所学的知识。 对数组名的理解#xff1a; 数组名是数组首元素的地址… 指针和数组习题 前言一、一维数组二、字符数组三、二维数组四、指针题目 前言
学习了指针的初阶和进阶后已经对指针有了一定了解。下面就需要做题目去巩固所学的知识。 对数组名的理解 数组名是数组首元素的地址但是由两个例外
sizeof数组名这里的数组名表示整个数组计算的是整个数组的大小。数组名这里的数组名是整个数组取出的是整个数组的地址。
一、一维数组
#include stdio.h
int main()
{int arr1[] { 1,2,3,4 };printf(%d\n, sizeof(arr1));//16计算整个数组的大小printf(%d\n, sizeof(arr10));//4/8数组名arr1是首元素地址a0还是首元素的地址地址的大小为4/8个字节printf(%d\n, sizeof(*arr1));//4*arr1是首元素大小是4个字节printf(%d\n, sizeof(arr11));//4/8arr1是首元素的地址arr11是第二个元素的地址地址大小为4/8个字节printf(%d\n, sizeof(arr1[1]));//4arr1[1]是第2个元素大小是4个字节printf(%d\n, sizeof(arr1));//4/8arr1是数组的地址数组的地址也是地址是地址那就是4/8个字节printf(%d\n, sizeof(*arr1));//16arr1是数组的地址*arr1是整个数组的元素是16个字节printf(%d\n, sizeof(arr11));//4/8arr1是整个数组的地址arr11是跳过了整个数组的下一个地址是地址那就是4/8个字节printf(%d\n, sizeof(arr1[0]));//4/8arr1[0]是首元素arr1[0]是首元素的地址是地址那就是4/8个字节printf(%d\n, sizeof(arr1[0]1));//4/8arr1[0]是首元素的地址arr1[0]1是第二个元素的地址是地址那就是4/8个字节return 0;
}二、字符数组
#include stdio.h
#include string.h
int main()
{char arr2[] { a,b,c,d,e,f };printf(%d\n, sizeof(arr2));//6数组名单独放在sizeof内部这里的arr2表示整个数组计算的是整个数组的大小单位是字节大小为6个字节printf(%d\n, sizeof(arr20));//4/8arr2表示数组的首元素地址arr20还是数组的首元素地址是地址就是4/8个字节printf(%d\n, sizeof(*arr2));//1arr2表示数组的首元素地址*arr2表示首元素大小为1个字节printf(%d\n, sizeof(arr2[1]));//1arr2[1]表示第二个元素大小为1个字节printf(%d\n, sizeof(arr2));//4/8arr2是整个数组的地址是地址就是4/8个字节printf(%d\n, sizeof(arr21));//4/8arr2是整个数组的地址arr21是跳过整个数组后的地址是地址就是4/8个字节printf(%d\n, sizeof(arr2[0]1));//4/8arr2[0]是数组的首元素地址arr2[0]1是第二个元素的地址是地址那就是4/8个字节printf(%d\n, strlen(arr2));//随机值因为字符数组中没有\0,所以求字符长度的时候会一直往后找产生的结果是随机值printf(%d\n, strlen(arr20));//随机值arr20是数组的首元素地址是随机值printf(%d\n, strlen(*arr2));//非法访问arr2是数组的首元素地址*arr2是数组首元素就是字符‘a’也是97strlen就从97这个地址开始访问统计字符串长度非法访问printf(%d\n, strlen(arr2[1]));//非法访问arr2[1]是第二个元素‘b’以第二个元素的值为地址开始访问统计字符串长度非法访问printf(%d\n, strlen(arr2));//随机值arr2是整个数组的地址数组的地址和数组首元素的地址值是一样的传递给strlen函数从数组第一个位置开始统计字符串长度结果是随机值printf(%d\n, strlen(arr21));//随机值arr2是整个数组的地址arr21跳过整个数组后的地址然后开始统计字符串长度结果为随机值printf(%d\n, strlen(arr2[0]1));//随机值arr2[0]是首元素的地址arr2[0]1是第二个元素的地址从第二个元素地址开始统计字符串长度结果为随机值char arr3[] abcdef;printf(%d\n, sizeof(arr3));//7计算整个数组的大小‘\0’也统计在内为7个字节printf(%d\n, sizeof(arr3 0));//4/8arr3为数组首元素地址arr3 0也是数组首元素地址是地址就是4/8个字节printf(%d\n, sizeof(*arr3));//1arr3为数组首元素地址*arr3为数组首元素首元素为1个字节printf(%d\n, sizeof(arr3[1]));//1arr3[1]为第二个元素占1个字节printf(%d\n, sizeof(arr3));//4/8arr3为整个数组的地址是地址那就是4/8个字节printf(%d\n, sizeof(arr3 1));//4/8arr3为整个数组的地址arr3 1跳过整个数组后的地址是地址那就是4/8个字节printf(%d\n, sizeof(arr3[0] 1));//4/8(arr3[0]是首元素的地址arr3[0] 1是第二个元素的地址是地址那就是4/8个字节)printf(%d\n, strlen(arr3));//6计算字符串的长度为6printf(%d\n, strlen(arr3 0));//6arr3为首元素地址arr3 0还是首元素地址从首元素地址开始访问统计字符串长度字符串长度为6printf(%d\n, strlen(*arr3));//非法访问*arr3为数组首元素的值非法访问printf(%d\n, strlen(arr3[1]));//非法访问arr3[1]为第二个元素b,ASCII码值就是98地址为98开始统计字符串长度非法访问printf(%d\n, strlen(arr3));//6arr3整个数组的地址也是首元素地址字符串长度为6printf(%d\n, strlen(arr3 1));//随机值arr3 1是跳过整个数组后的地址然后开始访问统计字符串长度为随机值printf(%d\n, strlen(arr3[0] 1));//5arr3[0] 1是第二个元素的地址从第二个元素开始统计字符串长度长度为5char* p abcdef;printf(%d\n, sizeof(p));//4/8p是一个指针变量printf(%d\n, sizeof(p1));//4/8p1指向第二个元素的地址printf(%d\n, sizeof(*p));//1第一个元素大小为1个字节printf(%d\n, sizeof(p[0]));//1数组法第一个元素大小为1个字节printf(%d\n, sizeof(p));//4/8p指向的是p的地址类型是char**是地址那就是4/8个字节printf(%d\n, sizeof(p 1));//4/8p 1指向的是‘\0’后面的地址是地址那就是4/8个字节printf(%d\n, sizeof(p[0] 1));//4/8p[0] 1指向第二个元素的地址得到的是‘b’的地址是地址那就是4/8个字节printf(%d\n, strlen(p));//6p指向字符串首地址printf(%d\n, strlen(p1));//5p1指向字符串第二个元素首地址printf(%d\n, strlen(*p));//非法访问*p是—‘a’以‘a’为地址访问统计字符串长度非法访问printf(%d\n, strlen(p[1]));//非法访问p[1]为第二个元素‘b’以‘b’为地址访问统计字符串长度非法访问printf(%d\n, strlen(p));//随机值p指向的是p的地址类型是char**printf(%d\n, strlen(p 1));//随机值p1,指向的是字符串‘\0’后面的地址printf(%d\n, strlen(p[0] 1));//5p[0] 1第二个元素的地址从第二个元素地址统计字符串长度长度为5return 0;
}三、二维数组
#include stdio.h
int main()
{int a[3][4] { 0 };printf(%d\n, sizeof(a));//3*4*448整个数组的字节printf(%d\n, sizeof(a[0][0]));//4二维数组第一个元素的字节printf(%d\n, sizeof(a[0]));//16a[0]是第一行这个一维数组的数组名数组名算是单独放在sizeof内部计算的是整个数组的大小printf(%d\n, sizeof(a[0]1));//4/8a[0]作为第一行的数组名没有单独放在sizeof内部没有那么a[0]表示数组的首元素地址也就是a[0][0]的地址所以a[0]1是第一行第二个元素的地址是地址那就是4/8个字节printf(%d\n, sizeof(*(a[0]1)));//4计算第一行第二个元素的大小printf(%d\n, sizeof(a1));//4/8a是数组首元素地址是第一行的地址a1就是第二行的地址类型是int(*)[4]printf(%d\n, sizeof(*(a1)));//16(*(a1)-a[1]-sizeof(*(a1)-sizeof(a[1]),计算的是第二行的大小a1是第二行的地址类型int*[4],*(a1)访问的是第二行的数组)printf(%d\n, sizeof(a[0]1));//4/8a[0]是第一行的地址a[0]1是第二行的地址是地址那就是4/8个字节printf(%d\n, sizeof(*( a[0] 1)));//16第二行的大小printf(%d\n, sizeof(*a));//16a是数组首元素的地址就是第一行的地址*a就是第一行*a—*(a0)—a[0]printf(%d\n, sizeof(a[3]));//16(不访问只看类型)return 0;
}表达式有两个属性
值属性9类型属性sa2——short
#include stdio.h
int main()
{int a 7;short s 4;printf(%d\n, sizeof(s a 2));printf(%d\n, s);return 0;
}打印 2 4
四、指针题目
题目1
#include stdio.h
int main()
{int a[5] { 1,2,3,4,5 };int* ptr (int*)(a 1);printf(%d,%d, *(a 1), *(ptr - 1));//打印 2,5return 0;
}