随笔,数组

指针和数组的转化:数组可以转化为指针,反之不成立,数组相当于指针,一个*相当于一个维度。
在这里插入图片描述

  1. 数组的长度必须是常量,index可以是变量
  2. 数组定义未给定长度时,长度为初始化列表的长度;否则为定义长度。
  3. 初始化列表只能用于初始化数组,对数组的赋值必须逐个进行。
//for example
int main(){
	int year[10];
	year [10]={0};//it's wrong.
	for(int i=0;i<10;++i){
		year[i]=0;//it's fine.
	}
}
  1. 数组的名字是地址
int main(){
    int num[10];
    //int sum=0;
    printf("%X\n",num);
    printf("%X",&num);   
}
//in fact ,they are the same
//61FDF0
//61FDF0
  1. 数组的长度用于计算所需的局部变量看空间的大小,之后,长度会丢失,这时因为访问数组元素时无需知道数组的大小
  2. 数组作为参数时,传递的只有数组的地址,而不是传递各个元素的值,作为参数会省略长度这一参数,所以长度需要另外传递
for example:void text (int array[20],int length)
//20会被省略,length才可以用来传递长度
  1. sizeof这个关键字可以用来传递数组的长度,strlen这个函数可以用来传递字符串的长度,但是如果sizeof用在了字符串上面,会多出一个\0
  2. 字符数组是c语言中的字符串,一定要以\0结尾而且赋值时是’\0’
  3. 字符串函数另外总结了一份。
char *s1="hello,world";
//相当于const char *s1,不能通过s1来修改字符
char s2[]="hello,world";
//相当于char *const s2,s2只能指向首地址,不能改变s2 的值
  1. 给地址加1,实际上是加了该指针指向的数据的大小。
  2. 数组的首地址就是指针,array[i]=*(array+i);
  3. 变长数组的申请方法
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include <stdio.h>
#include<malloc.h>
void fun(int *address){
    if(address==NULL){
        return;
    }
}
int main(){
    int length;
    scanf("%d",&length);
    int *address=NULL;
    int byte=sizeof(int)*length;
    address=(int *)malloc(byte);
    //malloc:给这个地址申请byte大小的地址。
    //length是数组长度。
    //并强制转化为指向int的指针。
    for(int i=0;i<length;++i){
        scanf("%d",address+i);
    }
    for(int j=0;j<length;++j){
        printf("%d",*(address+j));
    }
    //上面是测试。
    fun(address);
    if(address!=NULL){
        free(address);//记得free
        address=NULL;
    }
    return 0;
}
  1. 改变两个变量的值的方法

void swap(int* a,int* b){
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}//第一种
int main(){
    int a=1,b=2;
    swap(&a,&b);
    printf("%d\t%d\n",a,b);
    a=a+b;
    b=a-b;
    a=a-b;//第二种
    printf("%d\t%d\n",a,b);
    a=a^b;
    b=a^b;
    a=a^b;//第三种
    printf("%d\t%d\n",a,b);
}
  1. char *name[5](五个指向字符串的指针) is equal to char name[5][15]
	char *str[5]={
        "hello",
        "world",
        "monday",
        "tursday",
        "ok"
    };
    for(int i=0;i<5;++i){
        printf("%s\n",str[i]);//注意这个!!!
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值