数组与指针
来源:互联网 发布:cf号怎么解封软件 编辑:程序博客网 时间:2024/06/04 18:40
1、字符串
c语言中没有像java中的String类型,但是有char类型,所以
写法一: char str[]="abcdefg";
字符串在定义中,最后有个默认不显示的’\0’,代表结束该段字符串。
写法二:char * str2="abcdefg";
这种写法代表字符串常量,会放到常量池中,随时准备复用,验证一下?
char str[]="abcdefg"; char * str2="abcdefg"; char * str3="abcdefg"; printf("%p\n",str); printf("%p\n",str2); printf("%p\n",str3);
结果是:
0060FF480040300000403000
可以看到str2 和str3的地址是一样的哦!
上面中的 str 、str2、str3代表的是字符串的首地址,例如:
char str[]="abcdefg"; char * str2="abcdefg"; char * str3="abcdefg"; printf("%s\n",str); printf("%s\n",str2); printf("%s\n",str3);//从字符串首地址一直到'\0'的位置
结果是:
abcdefgabcdefgabcdefg
而 *str 、*str2 、*str3 、*str4 代表取出字符串中的第一个字符
char str[]="abcdefg"; char * str2="abcdefg"; char * str3="abcdefg"; char str4[]={'a','b','c','d','e','f','g','\0'}; printf("%c\n",*str); printf("%c\n",*str2); printf("%c\n",*str3);//从字符串首地址一直到'\0'的位置 printf("%c\n",*str4);
结果:
aaaa
&str 和 str的区别
char str[]="abcdefg"; char * str2="abcdefg"; char * str3="abcdefg"; char str4[]={'a','b','c','d','e','f','g','\0'}; printf("%c\n",*(str+1)); printf("%c\n",*str2); printf("%c\n",*str3);//从字符串首地址一直到'\0'的位置 printf("%c\n",*(str4+2)); /*&str代表字符串数组的整个地址,str代表的是字符串的首个字符地址, * str+1 代表:str+sizeof(*str) * &str+1 代表:&str+sizeof(*&str) */
结果:
baac
char * str 和 char str[]区别
char str[]="abcdefg"; char * str2="abcdefg"; char * str3="abcdefg"; char str4[]={'a','b','c','d','e','f','g','\0'}; printf("改变前:%s\n",str); printf("%c\n",*str2); printf("%c\n",*str3);//从字符串首地址一直到'\0'的位置 printf("%c\n",*(str4+2)); change(str); /*传递数组的引用 * */ printf("改变后:%s\n",str); change2(str); printf("改变后2:%s\n",str);}/* * char * str 和 char str[] 代表都是字符串数组,char str[]编译后就是 char * str */void change(char * str){ *str='b';}void change2(char str[]){ *str='c';}
结果:
改变前:abcdefgaac改变后:bbcdefg改变后2:cbcdefg
2、数组
总结过上面的字符串其实数组也没啥东西了
//数组作为形参时,可以是int * arr 也可以是int arr[],但是不能直接像字符串那样 int * arr={}; //这样是错误的 int arr[]={1,2,3,4,5,6}; int arr2[6]={1,2,3,4,5,6}; int arr3[6]; arr3[0]=1; arr3[1]=2; printf("%d\n",*arr); printf("%d\n",*arr2); printf("%d\n",*arr3); //二维数组 行数可以不写,因为它自己就可以知道数量,例如定义一维数组时,但是列数必须写。 int arr4[][4]={{1,2,3,4},{5,6,7,8}}; //(*arr4)代表{1,2,3,4}的首地址,*(*arr4)取出{1,2,3,4}的第一个元素 printf("%d\n",*(*arr4));
结果:
1111
指针数组
//指针数组 顾名思义 存储指针的数组 int a=10; int * arr[3]; arr[0]=&a; printf("%p\n",*arr);
结果:
0060FF44
数组地址和数组元素首地址的区别
// int * arr=(int *)malloc(5*sizeof(int)); 申请5个int大小的内存资源 可以像使用数组一样给其赋值:例如:arr[0]=1;或者*arr=1; int arr[2]; arr[0]=9; arr[1]=8;// arr[2]=7;// arr[3]=6;// arr[4]=5; int * ap=(int *)(&arr+1);//&arr+sizeof(*&arr) 代表加上了一个数组的长度 printf("%d\n",sizeof(int)); printf("%p\n",arr); printf("%p\n",&arr); printf("%p\n",ap); printf("%d\n",*arr); printf("%d\n",*(ap-1));//ap-sizeof(int) 减去数组中一个元素的长度 就得到了数组的最后一个元素的地址
结果:
40060FF480060FF480060FF5098
1 0
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- CSS3之nth-child与nth-of-type
- 【Android】【ViewGroup】【ListView】ListView的一些细节
- 恶心的新浪云sae.sina.com.cn谁买新浪云谁上当
- html--设置360浏览器默认为极速状态的mate标签
- javascript事件处理
- 数组与指针
- 常见css样式
- hive大数据倾斜总结
- 聚享乐城提醒您:吃水蜜桃 关注奥运会
- weblogic中查看内存与修改内存
- 学习笔记:ASP.NET MVC ModelState验证模型状态
- androiddevtools
- 兔子(tuzicms)网站程序及数据库迁移搬家教程
- eclipse关闭Updating Error Reporting Database