c语言基础2—数组、字符串、指针
来源:互联网 发布:种族电影知乎 编辑:程序博客网 时间:2024/05/12 04:31
一、数组
1、一维数组的初始化,先定义后初始化,在定义的时候一定要给数组元素个数。 int age[5]; age[0]=5;
2、定义同时初始化int age[5] = {1,2,3,4,5};
3、定义同时部分初始化,未初始化的值为0。int age[5] ={1,2}; int age[5] = { [3]=4, [4]=5};
4、 不给定数组元素个数初始化,此时数组中元素有5个。 int age[] = {1,2,3,4,5};
5、 注意如下定义是不合法的,没有给定数组元素个数,如何初始化。 int age[];
6、 注意如下初始化是不合法的。int age[5] ; age = {1,2,3,4,5};
7、注意如下也是不对的,数组下标只能是常量值。int count = 5; int age[count] = {0,1,2};
8、但如下写法是可以的,未初始化的元素值不确定。int count = 5; int age[count]; age[0]= 4; age[1]=5;
9、sizeof(age)/sizeof(int)计算数组的长度,数组名这个常量的算数运算所加值的大小,是等同于数组元素的字节数,编译器运算。
10、数组名就可以当数组的地址,数组的地址就是首元素的地址。
11、基本数据类型作为参数是值传递,当想对基本数据类型的参数进行值更改时,则需要使用指针。
12、指针和数组并不是想等,int a[5]和int *b,a和b可以互换么,他们都具有指针值,他们都可以进行间接访问和下标引用。在声明一个数组时,编译器会根据声明所指定元素的数量分配内存空间,然后再创建数组名,它的值是一个常量,一个常量值是不能更改的,a++等对自身值改变的事件时不能的,但*(a+2)代表是去数组的第三个元素的值,并未对a常量的值进行改变,当然可以。声明一个指针变量的时候,编译器只会给指针本身分配内存空间,指针变量并未指向任何空间。这是你*a是合法的,应为有内存空间,里面有值可取。但*b没有指向任何空间,你访问它将发生错误。
13、数组元素的三种访问方式int a[5] int *p = a ,数组下标,指针*(p+1),指针变量下标p[i]。
二、字符串
1、在c语言中,并没有显示的字符串数据类型,而是以字符常量,或者存储于字符数组中,但字符数组可以不包含NUL,在字符串的末尾默认有一个字符串结束标记’\0’字符,'ASCII码值为0。字符串所包含的字符内部不能出现NUL字符。字符串在定义的时候可以写成如下方式。
- char name[5] = “it”;
- char name[5] = {‘i’,’t’,’\0’};
- char name[5] = {’i’,’t’,0};
2、strlen函数使用注意,在计算字符串长度的时候,他会遇到'\0’就停止计算。char name[] = {‘2’,’0’}; 这样的字符数组,strlen函数是计算不出来的,因为他不是一个字符串,不包含’\0’。
3、字符串数组
- char name[2][10] = {“jack”, “tom”};//字符数组
- char *name[5] = {“jack”, “tom”};//指针数组
4、定义字符串的两种方式区别
- char name[3] = “it”;//这里面的值可以随便改
- //使用场合,字符串的内容需要经常修改
- char *name = “it”;//字符串常量,里面的字符是不能改的
- //同时这个it放到常量区,整个内存只有一份
- //使用场合字符串的内容需要经常访问
- printf(“%s”,name2);//他会输出整个字符串,机制是遇到’\0’结束
三、指针
1、为初始化和非法的指针:指针变量只能存储地址,在指针变量确定指向之前,也就是没有初始化,不要去访问他。下面的两行代码说明了一个极为常见的错误.int *a; *a = 12;这里声明了一个名叫a的指针变量,12存储在a所指向的内存位置。我们声明一个名叫a的指针变量,但从未初始化,是没有办法预测12会存储到什么位置上的。
2、空指针:NULL指针作为一个特殊的指针变量,表示不指向任何东西,要使一个指针变量为空,你可以给它一个零值。同时为了测试一个指针变量是否为空,你可以和0进行比较。一种良好的编程风格 ,在定义一个指针变量后,如果你知道他的初始地址,则初始化,否则应该给他一个NULL。对空指针进行访问,有些机器会报错,有些编译起则会隐藏。
3、指针变量的内容:指针变量存储的是地址,指针变量的初始化用&来完成。
4、间接访问操作符:也就是*,通过一个指针变量访问所指向的地址的过程称为间接访问或解引用指针。访问指针变量所指向的那块内存空间的值。其实可以想着*后面加的是地址,访问地址所指向的那片存储空间的值,如果那片存储空间的值还是地址,我在加个*就在访问地址的值,就相当于访问指针的指针。 (*(*p))解析 p为指针变量,里面存的肯定是地址,前面有颗*那就是访问p地址指向的那片内存里存的值,正好这个地址也是个地址,那么我在来一颗*,是不是就是访问这个地址所指向内存的值,也就是指向指针的指针。
- int a = 12;
- int *b = &a;
- int **c = &b;
- //修改a的值的三种方法
- a=20; *b = 20; **c = 20;
#include <string.h>
void sort(char p[][128],int l);
int main()
{
char strings[6][128];
printf("请输入6个只包含字母和数字的字符串:");
for(int i=0;i<6;i++)
{
scanf("%s",strings[i]);
}
sort(strings,6);
printf("由小到大的排列结果是:\n");
for(int i=0;i<6;i++)
{
printf("%s\n",strings[i]);
}
return0;
}
void sort(char p[][128],int l)
{
int i,j;
char temp[128];
for(i=0;i<l-1;i++)
{
for(j=i+1;j<l;j++)
{
//if(strcmp(p[i],p[j])>0)
if (strlen(p[i])>strlen(p[j]))
{
//数组不能直接复制,需要使用函数拷贝,如果使用指针数组可以直接赋值
/*temp=p[i];
p[i]=p[j];
p[j]=temp;*/
strcpy(temp, p[i]);
strcpy(p[i], p[j]);
strcpy(p[j], temp);
}
}
}
}
- c语言基础2—数组、字符串、指针
- C语言基础之数组、字符串、指针
- 黑马程序员 _4 C语言基础 数组,指针,字符串
- C语言编程基础-13字符串操作与指针数组
- c语言基础——指针数组
- c语言基础—指针与数组
- c语言基础:数组、指针
- c语言基础--数组指针
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- C语言基础—数组和字符串
- C语言基础:C语言指针(5) - 指针和数组
- C语言基础:C语言指针(6) - 指针和字符串
- 【c语言基础】字符串数组与字符串指针的理解心得
- ios学习路线—C语言(函数,数组,字符串,指针)
- C语言练习-指针(数组,字符串)
- 【C语言学习笔记】数组、字符串、指针
- C语言字符串、数组与指针结合
- C语言字符串指针---与数组0811
- aduc7026开发板通过串口下载程序的过程
- poj 2151 Check the difficulty of problems 概率dp
- 黑马程序员——java基础--正则表达式
- 【备份】Ubuntu目前最好的软件源:阿里云
- Ubuntu安装中文输入法提示Software database is broken
- c语言基础2—数组、字符串、指针
- hadoop2.X的eclipse插件的编译与配置
- 二叉树的链式存储
- 二叉树遍历实例
- Solution of Introduction to Algorithms
- *Leetcode-Factorial Trailing Zeroes
- 《linux c编程一站式学习》笔记1
- Leetcode-Compare Version Numbers
- 黑马程序员--集合框架