c语言中关于数组的一些基本运算

来源:互联网 发布:威锋认证的淘宝店 编辑:程序博客网 时间:2024/05/08 07:38

一.sizeof()的有关运算

知识:当数组名a单独放在sizeof()内部(即 sizeof(a)  )时,a表示整个数组;当数组名a单独放在&后面时(即&a),a表示整个数组;其余的a都表示数组a首元素的地址;&a,表示数组a的地址,其实是a首元素的地址,一个整形大小为4个字节,一个字符型大小为1个字节


include<stdio.h>int main(){    int a[] = {1,2,3,4};    printf("%d\n",sizeof(a));    //整个数组的大小                 16    printf("%d\n",sizeof(a+0));   //首元素的地址加0,还是首元素的地址           4    printf("%d\n",sizeof(*a));  //数组a首元素的大小                4    printf("%d\n",sizeof(a+1));  //数组a首元素的地址加1,表示数组第二个元素的地址的大小,地址为4个字节     4    printf("%d\n",sizeof(a[1]));   //数组a第二个元素的大小              4    printf("%d\n",sizeof(&a));   //数组a首元素地址的大小                4    printf("%d\n",sizeof(&a+1));   //数组a下一个数组(其他)的地址大小  4    printf("%d\n",sizeof(&a[0]));  //数组a首元素地址的大小             4    printf("%d\n",sizeof(&a[0]+1));  //数组a第二个元素的地址的大小     4    return 0;}//字符数组#include<stdio.h>int main(){char arr[] = {'a','b','c','d','e','f'};  //arr[]表示一个字符数组,里面有6个元素,不包括\0,一个char类型大小为1个字节        printf("%d\n", sizeof(arr));  //整个数组的大小       结果为6        printf("%d\n", sizeof(arr+0));   //数组首元素的地址          4        printf("%d\n", sizeof(*arr));  //数组首元素的大小           1        printf("%d\n", sizeof(arr[1]));  //数组第二个元素'b' 的大小   1        printf("%d\n", sizeof(&arr));  //数组首元素的地址            4        printf("%d\n", sizeof(&arr+1));  //跳过整个数组,后面内容的地址的大小  4        printf("%d\n", sizeof(&arr[0]+1));   //数组第二个元素的地址的大小   4return 0;}二.strlen()的有关运算(1)strlen()用来计算指定字符串的长度,不包括结束字符“\0”;(2)它会从首地址一直找下去,直到遇到"\0"停止.1.#include<stdio.h>#include<string.h>int main(){char arr[] = {'a','b','c','d','e','f'};printf("%d\n", strlen(arr));//从数组的首元素地址一直找下去,直到"\0"停止,该数组不包括"\0",所以它会一直找下去,计算结果为一随机数    printf("%d\n", strlen(arr+0));//从数组的首元素地址一直找下去,计算结果为一随机数    printf("%d\n", strlen(*arr));//*arr表示首元素,即'a',也就是从地址值为97开始找,但97是一个未知地址,不允许访问,所以这题是错误的    printf("%d\n", strlen(arr[1]));//arr[1],即'b',所以这题也是错误的    printf("%d\n", strlen(&arr));//从数组的首地址一直找下去,计算结果为一随机数    printf("%d\n", strlen(&arr+1));//从跳过这个数组的地址开始找下去,计算结果为一随机数,比上式大6    printf("%d\n", strlen(&arr[0]+1));   //从数组的第二个元素的地址一直找下去,计算结果为一随机数,比上式小5return 0;}2.#include<stdio.h>#include<string.h>int main(){char *p = "abcdef";//*p 表示字符类型的指针变量p    printf("%d\n", sizeof(p));//p存放首元素a的地址,则结果为4    printf("%d\n", sizeof(p+1));//p+1存放b的地址,结果为4    printf("%d\n", sizeof(*p));//*p表示首元素,结果为1    printf("%d\n", sizeof(p[0]));//表示首元素,结果为1    printf("%d\n", sizeof(&p));//字符类型的指针变量p的地址大小,结果为4    printf("%d\n", sizeof(&p+1));//指向下一个地址,仍然是地址,结果为4    printf("%d\n", sizeof(&p[0]+1));//b的地址,结果为4    printf("%d\n", strlen(p));//从a的地址一直找,直到遇到"\0"结束,结果为6    printf("%d\n", strlen(p+1));//从b的地址一直找,直到遇到"\0"结束,结果为6    printf("%d\n", strlen(*p));//错误,*p表示首元素,即'a',也就是从地址值为97开始找,但97是一个未知地址,不允许访问,所以这题是错误的    printf("%d\n", strlen(p[0]));//错误,与上式一样   return 0;}





                                             
1 0
原创粉丝点击