数组和指针2 const sizeof strlen 在数组和指针中的应用

原创 2018年04月17日 20:35:03
1.什么是数组?
 一块连续的内存,相同类型数据的集合
 数组名:数组收首元素的首地址。
2.二级指针
   int a=10;
   int *p=&a;
   *p=30;
   int**p2=&p;
   **p2=1000;
   printf("%d %d %d",*p,**p2,a);  此时值都为1000,*表示间接引用,哟个*一次解引用。
3.字符数组字符串
     %s:打印字符串,遇到\0,0才停止.
     %c:打印字字符
     char arr1[10] = {'a','b','c','d','e','f'};默认后面有\0;字节数为10
     arr1[0] = 'g';
     printf("arr1 == %s\n",arr1);           //打印gbcdef
     char str[] = "abcdef";                     //默认后面有0 字节数为7
     char str2[7] = "abcdef";                 //有'\0', 字节数为7
     char arr2[6] = {'a','b','c','d','e','f'};  //字节数为6, 没有'\0'打印结果为abcdef烫烫烫烫烫abcde因为%s只有遇到'\0'才停                                                                    止,就会找扫上一个数组的'\0',只有遇到'\0'才会停止
     printf("%s\n",arr1);//abcdef     
     printf("%s\n",str);//abcdef
     printf("%s\n",str2);//abcdef
     printf("arr2 == %s\n",arr2);//abcde
4.只读数据
   (1) char *str3="abcdef";
            *str3='g';                   //此时str这个变量存储在栈上,str所指向的数据存储在只读段(readonlydate),只读段的数据
                                                只能读取不能更改 不能拷贝。
   (2) char *str="hello";
             char *str1="world";
             str=str1;                    //只读数据不能被赋值。
             printf("%s %s",*str,*str1);
5.字符串常量 const
    (1)   char *str="abcdef";    //字符串常量
    (2)   const
           const int b=20;
           b=30;                     //此时运行这两句会报错const定义的变量叫常变量,必须定义的同事赋值,一旦赋值不能被改变。
           const int b=30;
   (3)   定义指针变量时const离谁近修饰谁
          const char *str2 = "hello";               //离*近,str里面的内容不能改变 *str2
          char const *str2="hello";                //离*近,str里面的内容不能改变 *str2
          char  * const str2 = "hello";            //str的指向不能改变 
6.断言
      头文件为#include<assert.h>
      assert(表达式)  断定表达式为真
     可以准确找到错误,断言仅在debug(开发)版本下生效,relese版本无效。
7.数组在什么时候确定大小?什么时候分配内存?数组最大分配多大内存?
           数组在编译的时侯确定大小,运行的时候分配内存,数组在栈上存储,栈的大小一般为一兆或者两兆,所以数组最大分配    的内存不超过一兆或者两兆
8.strlrn的返回值是无符号的,所以不能用差值。
7.    sizeof  strlen
       sizeof 求字节数,包含'\0',strlen 求字符串长度,不包含'\0',遇到'\0'停止。
    (1) char *str = "hello";
              char str2[10] = "abcde";
              printf("str ==%d,%d\n",sizeof(str),strlen(str));       //4(任何指针变量字节数都是4)5
              printf("str2 == %d,%d\n",sizeof(str2),strlen(str2));//10(数组大小) 5
    (2 )char str[100] = "abcdef";
              char str2[] = "abcdef";
              char *str3 = "abcdef";
              char str4[100] = "abcdef\0xyz";
              char str5[] = "abcdef\0xyz";
              char *str6 = "abcdef\0xyz";
              char str7[] = "abcdef\n\0";
              char *str8 = "abcdef\n\0";
              printf("str == %d,%d\n",sizeof(str),strlen(str));              //100  6
              printf("str2 == %d,%d\n",sizeof(str2),strlen(str2));        // 7     6
              printf("str3 == %d,%d\n",sizeof(str3),strlen(str3));        //4      6
              printf("str4 == %d,%d\n",sizeof(str4),strlen(str4));        //100  6
              printf("str5 == %d,%d\n",sizeof(str5),strlen(str5));        //11    6
              printf("str6 == %d,%d\n",sizeof(str6),strlen(str6));        //4      6
              printf("str7 == %d,%d\n",sizeof(str7),strlen(str7));        //9      7
              printf("str8 == %d,%d\n",sizeof(str8),strlen(str8));        //4      7
    这里需要注意几点:
    1.求sizeof包含后面默认的字节零,如果字符串内本身也有字符零 当普通字符计算 后面依旧包含默认的
    字符零.
    2.用sizeof求数字长度时可以越界,因为sizeof是关键字,关键字求值是在编译时。
    3.求strlen 不包含字符零且遇到字符零就停止.
    4.任何指针变量的字节数都是4.

sizeof, strlen, 指针和数组作为函数参数

typedef struct st_test { int id; char *pName; char class[10]; }Student; void fn(Student *...
  • ameyume
  • ameyume
  • 2011-01-25 14:19:00
  • 2896

sizeof求struct各种组合的长度,以及指针,字符数组的长度

首先,各类型长度分别是: short 2 long / int  4 char 1 double 8   以示例说明,如下 struct {  short a1;  short a2...
  • firefly_2002
  • firefly_2002
  • 2012-12-04 16:50:41
  • 934

sizeof(数组名)和sizeof(指针)

在做这道题时: 32位环境下,int *p=new int[10];请问sizeof(p)的值为() A、4              B、10              C、40        ...
  • KangRoger
  • KangRoger
  • 2014-03-06 21:24:08
  • 92180

关于对数组及指针使用sizeof的一点心得

今天调试程序时,偶然间发现一个从没有注意的问题,测试代码如下: char a[8]; char *b; b=new char[100]; int d=sizeof(a); int e=siz...
  • u014023993
  • u014023993
  • 2015-01-15 21:33:12
  • 1639

C语言中数组名和指针的区别 及 sizeof用法

#i nclude int main(int argc, char* argv[]) { char str[10]; char *pStr = str;  cout  实际情况...
  • tianyue168
  • tianyue168
  • 2010-08-02 09:50:00
  • 4349

sizeof在数组和指针中的区别

先看以下一段代码: #include #include using namespace std; int main() { int a[4]; int* b=new int[4...
  • Szu_AKer
  • Szu_AKer
  • 2016-09-07 10:54:37
  • 556

三维(多维)数组与 指针 sizeof strlen

多维数组可以看作是一维数组的首元素地址所组成的数组的首元素地址所组成的数组~~~ 而且同级别的元素在连续的内存空间中存储 有点晕,来看个图 看个代码 输出了arr[0]开头的所有元素,因为ar...
  • mzx1317557721
  • mzx1317557721
  • 2017-04-03 18:54:01
  • 682

数组名是指针,为什么sizeof(数组名)还是数组的大小

数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。这种误解的根源在于...
  • u013176681
  • u013176681
  • 2014-08-30 22:07:59
  • 2175

C语言笔试试题汇集(超经典).doc

  • 2012年11月12日 22:33
  • 122KB
  • 下载

strlen与sizeof计算char* 与char数组

sizeof()可以计算所有类型,strlen()仅
  • u011866460
  • u011866460
  • 2014-09-29 11:17:11
  • 8845
收藏助手
不良信息举报
您举报文章:数组和指针2 const sizeof strlen 在数组和指针中的应用
举报原因:
原因补充:

(最多只允许输入30个字)