C语言基础——指针

【数组】
多个相同的基本数据类型元素 组成 有序集合  --- 构造数据类型

数组   --》 成员 --》   数据元素   

基本数据类型 : char int 。。。
数组类型:char int 。。。

int data[10];  数据类型  存储类型

int data[10] = {0};

static int data[10];

char str[20] = {0};

strlen: 字符串长度,不包括尾零;
strcat: 第一个字符串所在的预先准备存储空间必须足够大!

赋值:
char string[20]; 
循环 + getchar()
strcpy 
        
赋值:
int data[10];
for + scanf

遍历  --- for 

冒泡排序:依次两个两个比,比较后马上交换,每次比较找最大值,最大值放在靠后的位置上,最大值同下一个数据 参与下次比较;

【作业讲解】
1. 自己编程实现strcat、strlen功能,写main里(不能调用库函数strlen);
strlen : 
    “hello”  找‘\0’  5 
    “hello world”  找‘\0’  11

    1. getchar
    2. scanf
    3. gets    
2. strcat:
    i = n   dest[i] == '\0'
    j = 0    dest[i++] = src[j++]; 
            dest = src , i++, j++;
            dest[i] = '\0';

【strcmp】字符串比较
格式:strcmp(字符串1,字符串2)
功能:比较两个字符串
比较规则:对两串从左向右逐个字符比较(ASCII码),
                    直到遇到不同字符或‘\0’为止
返值:返回int型整数
a. 若字符串1< 字符串2, 返回负整数
b. 若字符串1> 字符串2, 返回正整数
c. 若字符串1== 字符串2, 返回零

strcmp(str, "");

" "       && ""      && ' '
空格字符串   空字符串   空格字符
error ''             

'0' &&  0  && ‘\0’   
48      0      0   

【strcpy】字符串拷贝
strcpy(字符数组1,字符串2)
功能:将字符串2,拷贝到字符数组1中去
返值:返回字符数组1的首地址
说明:字符数组1必须足够大
        拷贝时‘\0’一同拷贝
        不能使用赋值语句为一个字符数组赋值

【一维数组】 int data[10] = {1,2,3,4,5,6,7,8,9};

【二维数组】 目前  :  数据类型 ---》 基本数据类型
二维数组是由N个元素(一维数组)组成,每个元素a[i]由一维数组组成
int data[3][4]
data[0] data[1] data[2]
【整型数组】

【字符数组】
多个字符串, 行地址访问字符串
 
 行地址  ---》  行指针   
 
 地址---》指针
--------------------------------------------------
【指针】
【指针变量】
1 . 声明:<数据类型>  * <指针名字> ;
char  i = 10;   (0x00002000)
char * data;
2. 初始化值:
char *data = &i;
char *p = NULL;
3. 赋值;
char * data;
data = NULL;

char *data = NULL;
data = &i;

【野指针】防止野指针!

【NULL】 空指针
(void *) 0   

【间接访问】【直接访问】
10  
i    直接访问
*data  间接访问

0x00002000
&i    直接访问
data   间接访问

【指针运算】
【指针与常量 + -】
int a[4] = {10, 7, 5, 1};
int *p = &a[1];
p = p+1;
*p == 5;

【指针 ++ 、 --】
int a[4] = {10, 7, 5, 1};
int *p = &a[1];
*p++;  
*++p;

【指针与指针相减-】
int *p= &a[1]; int *q=&a[3];
p - q == ;

【指针关系运算】

<
>=
<=
!=
==

int *p;
char *q;

【一级指针】存储普通变量的地址
【二级指针】存储一级指针变量的地址

【一级指针遍历一维数组】
    #define N 10
    int a[N] = {11,12,13,14,15,16,17,18,19,20};
    int * p = &a[0];int i;
    //int *p = a;
    for(i = 0; i<N; i++){
    //    printf("%d\n", a[i]);
    //    printf("%d\n", *(a+i));
    //    printf("%d\n", p[i]);
        printf("%d\n", *(p+i));
    }

【】
int data[10];
 int *p = &a[0]; 
 //int *p = data;
 
 int data[3][4];
 int *p = &data[i][j];
 //int *p = data;
    
【作业】
1. 杨辉三角
2. 用指针实现数组逆序(整型);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值