C语言学习笔记-2

1.数组:存储统一数据类型的集合

a.数组的定义:数据类型 数组名[元素个数],其中元素个数可以不用定义: 如int grade[5]

        b.数组的赋值:数据类型 数组名[元素个数]={1,2,3,4}。注意在数组赋值的过程中是默认从数组第一位开始赋值,没有赋值的元素位置默认为0

        c.数组的使用:数组名[元素下标],注意下标从0开始

        d.sizeof计算数组占用的字节长度,使用方法sizeof(数组名)

2.字符串处理函数

a. strlen获取字符串长度

b. strcopy拷贝字符串数组, strcopy(str1,str2)将字符串数组2拷贝到字符串数组1,值得注意的是如果str1的长度>str2那么会出现str1超出的字符串丢失

c.strncpy:拷贝字符串数组 strncpy(str1,str2,5)将数组2拷贝到数组1,一共拷贝5个字符。需要注意的是这种拷贝方式不会将字符串结束符"\0"一起拷贝,所以最后需要手动加入“\0”,所以最终只会考入4个字符

d.strcat, strncat连接字符串:strcat(字符串数组1,字符串数组2)。这里字符串数组2可以为任意字符串。strncat相比strcat多了一个连接字符串的数量,strncat(字符串数组1,字符串数组2,连接字符串数量)

e.strcmp,strncmp比较字符串:strncmp相比strcmp多一个参数用于比较指定长度的字符串

3.二维数组

a.二维数组定义:数据类型 数组名[元素个数][元素个数]

b.二维数组的访问:同一维

c.二维数组的初始化:

int a[3][4]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}},

如果有没有定义的会默认为0

d.二维数组在内存中的储存:以行的形式储存。如int[3][4],第一行(三个数)第二行(三个数)第三行(三个数)

4.指针

a.定义指针变量:类型名 *指针变量名:其中类型是指这个指针变量对应的地址所代表的数据的数据类型。如char *pa:定义一个指向字符型的指针变量为pa

b.取地址运算符(&):获取某个变量的地址, char *pa = &a

取值运算符(*)获取指针变量指向的数据,如*pa

char a = 'F';
int  f = 123;
char *pa=&a;//获取变量a在内存中的地址
int *pb = &f;//获取变量f在内存中的地址
printf("a=%c",*pa)//通过指针变量pa 以及*获取变量的值
*pa = 'c'//通过指针改变变量的值
//简单理解指针。变量储存在内存空间,使用指针直接指向这个变量。指针本身也是一个变量也需要储存在内存,所以通过指针指向变量,就会产生三个东西:变量,指针,指针地址。
//a是变量,*pa是指针,pa是指针地址。

避免使用未初始化的指针,也就是申明了指针但是没有指针对应的变量值

//错误实例:
int *a;
*a = 123;
//正确实例
int *a = 123;

5.指针和数组

数组名是一个指针地址,同时也是数组第一个元素的地址。字符占一个字节,int&float占4字节,double占8字节。所以知道数组的第一个元素的地址,就可以累加获得整个数组的地址。

char array=["aaassdsfdfdfd"];
printf("数组的地址是%p",&array);
printf("数组第一个元素的地址是%p",&array[0]);

通过指针访问数组元素

char a[]="fishc";
int b[]={1,2,3,4,5};

char *pa= a;
int  *pb = b;
//方法1
printf("a的第一个元素%d,a的第二个元素%d,a的第三个元素%d",*pa,*(pa+1),*(pa+2));
printf("b的第一个元素%d,b的第二个元素%d,b的第三个元素%d",*pb,*(pb+1),*(pb+2));
//方法2:数组名本身就是一个指针
printf("a的第一个元素%d,a的第二个元素%d,a的第三个元素%d",*a,*(a+1),*(a+2));
printf("b的第一个元素%d,b的第二个元素%d,b的第三个元素%d",*b,*(b+1),*(b+2));

6.指针数组和数组指针

指针数组是一个数组,每个数组元素存放一个指针变量。 如int *pi[5]。表示一个指针数组,其由5个元素组成。

//指针数组
char *p[2]={
"aaaaa",
"bbbbb",
"ccccc"
}
printf("第一个元素%s",*p[0])
printf("第二个元素%s",*p[1])
printf("第三个元素%s",*p[2])

数组指针:数组指针是一个指针,指向一个数组如int (*pa)[5]。但是需要注意额是数组指针指向整个数组。而数组名虽然也是一个指针但是只是指向一个数组的第一个元素。

int a={1,2,3,4,5};
int (*pa)[5]=&a;//建立指针数组和数组之间的联系
int i ;
for(i = 0, i<5,i++){
printf("%d\n",*(*pa+i))//*pa只是一个指针数组,需要加*转化为指针
}

7.指针和二维数组

int array[i][j];
//如何用指针表示数组元素
*(array+i)==array[i]
*((array+i)+j)==array[i][j]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值