------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、数组的赋值,以下几种都是正确的:
1、int ages[5]={1,2,3,4,5};
2、int ages[5]={1,2}; //开辟的数组内存还是20个字节
3、int ages[5]={[3]=3,[4]};//只给在下标3和4的数组赋初值
4、int ages[]={1,2};//与2的区别在于内存只分配8个字节
5、int ages[‘A’-50]={1,2,3,4};//只要中括号里面是常量就可以。
二、算出可变数组的长度方法:
length=sizeof(array)/sizeof(数据类型)
算出字符串的长度:Length=strlen(array);
三、数组的内存存储
数组名=数组首元素地址=数组的首地址
四、数组与函数
1、数组作为函数的参数,可以省略数组的元素个数,数组作为函数的形参,传递的是地址,修改函数形参数组元素的值,会影响到外面实参的数组。而基本数据类型作为形参,是值传递。
2、数组当做函数的参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下占据8个字节。
五、字符串
1、 字符串在内存中的存放形式,字符串其实就是各种字符按照一定的顺序储存在数组里。
2、计算字符串长度用strlen()特点:
1.计算的是字符数,而不是数字。例如strlen(“哈abcd”);结果是7,一个汉字算作3个字符
2.计算的字符不包括\0
3.从某个字符的地址开始数字符的个数,直到遇到\0。
六、如何用一个函数实现实返回两个数字的加和减?
#include
int sumandminus(int num1,int num2,int *p);
int main()
{
inta = 20;
intb=10;
inhe=0;
intcha=0;
He=sumandminus(a,b,&cha);
Printf(“和=%d,差=%d\n”,he,cha);
}
int sumandminus(int num1,int num2,int *p)
{
*p=num1-num2;
Return num1+num2;
}
用指针可以间接改变函数外面变量的值,这是一个很好的思路。
七、数组和指针常量的区别:
(1)常量区
存放一些常量字符串
(2)堆
对象
(3)栈
存放局部变量
八、定义字符串的2种方式
1> 利用数组
charname[] = "itcast";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
3>指针数组与二维数组的相似性:
// 指针数组(字符串数组)
char *names[5] = {"jack", "rose", "jake"};
// 二维字符数组(字符串数组)
char names2[2][10] = {"jack", "rose"};
九、总结
1>指针的使用很灵活,利用指针间接进行操作提供了解决问题的另外一种方法。指针的作用就是用来存放地址,然后通过地址指向的内存空间进行操作。指针无论定义的是哪种数据类型,占用的内存空间都为8字节,定义的变量如果想要用指针来操作,必须具有相同的数据类型,否则编译会警告,且往往会导致结果不正确,这个请用内存来分析。
2>指针与数组虽然长得不像,但是在使用上却非常相似。就拿指针取元素跟数组取元素来说,都可以直接用下标取。当然,指针还有其自身的方法,就是让地址加i,指针通过+i也可以遍历整个数组的元素。
3>指针与字符串,指针与函数的使用都类似与指针与数组,指针与普通的变量。举一反三即可。