24.08.07

day7

字符型二维数组

前面填字符型数组名, 准确的是 一维字符型数组的名字

char  str[3][32] = {0};

    str[0]
    str[1]
    str[2]

char str[3][32] = {"xxxxx",  "123", "aaaaa"};        
gets(str[1]); 
puts(str[1]);

练习

1.实现字符串的追加
       char str[3][32] = {"xxxxx",  "123", "aaaaa"};"aaaaa"  追加到  "123"  后面

指针

  指针就是地址。
  地址:在内存空间中,以字节作为基本单位,每一个字节都有自己独一无二的编号,这个编号就是地址。 
      
   
  指针变量:存放地址编号的变量    
      
  通常我们在不影响理解的情况下,把地址、指针变量都叫指针。
      
      
指针变量一般形式:
      存储类型  数据类型  *变量名;
      
      
eg:
      int  a = 10int *p;
      p = &a;
      
      
      char ch;
      char *p = &ch;
      
      
&取地址  *取内容   
      
      int  a = 10, b = 20int *p = &a;       // 指针p 指向 a对应空间
      p = &b;             // 更改指针p的指向      	
           
      *p = 20// 修改p指针指向空间的内容   

大端序小端序

大端序:低位数据存在高地址
    
    
小端序:低位数据存在低地址    

指针的运算

指针的偏移操作
    
p + n:以p指针存的地址编号为基准,往高地址方向,偏移n个元素(偏移字节数: 偏移的元素个数 *元素大小小)
    
p - n:以p指针存的地址编号为基准,往低地址方向,偏移n个元素(偏移字节数: 偏移的元素个数 *元素大小小)   
    

p++:以p指针存的地址编号为基准,往高地址方向,偏移n个元素(偏移字节数: 偏移的元素个数 *元素大小小) ,最后更改指针的指向为偏移后的地址  
    
p--:以p指针存的地址编号为基准,往低地址方向,偏移n个元素(偏移字节数: 偏移的元素个数 *元素大小小) ,最后更改指针的指向为偏移后的地址    


q - p:结果为中间间隔的元素个数    
    

关系运算: > < >= <=  == !=
		
    
逻辑运算:  NULL 假     非NULLNULL:是零地址的宏    
 
    
[]:变址运算符
    
*(p + i) == p[i]       
 p[1] = *(p + 1)   
    
    
&  *: 互为逆运算
    
    int a = 10int *p; 
    p = &a;
    
    
    *&a) == 10 == a   

指针和一维数组的关系

一维数组的数组名,代表数组首元素的地址
    
    注意:数组的首地址是一个常量,不能被修改


int a[5] = {10,20,30,40,50};

//定义一个指针指向,一维数组的首元素
int *p = &a[0];
int *p;
p = a;


p[i] == *( p + i )  ==    a[i]  ==    *(a + i)
 

int a[5]= {10,20,30,40,50};
int b[5];   

练习

1.利用指针实现对数组元素求和
1int a[5] = {10,20,30,40,50};
	int *p = a;

	int sum = 0, i;
	for(i = 0; i < 5; i++)
    {
        sum += p[i];
    }

	printf("%d\n", sum);2int a[5] = {10,20,30,40,50};
        int *p = a;
        int *q = &a[4];

        int sum = 0, i;

        while(p <= q)
        {   
            sum += *p++;
        }   

        printf("%d\n", sum);
        printf("%p\n", &a[4]);
        printf("%p\n", p); 

指针与字符数组的关系

char *p1 = "hello world";
char *p2 = "hello world";

printf("%p\n", p1);
printf("%p\n", p2);    

打印的地址相同。
"hello world" 是字符串常量存在字符串常量区,在这个内存区域里有且仅有一个相同字符串。

    
    
char str1[32] = "hello world";
char str2[32] = "hello world";

printf("%p %p\n", str1, &str1[0]);
printf("%p %p\n", str2, &str2[0]);

打印的地址不相同。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值