黑马程序员-C语言数组与指针学习心得

------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>指针与字符串,指针与函数的使用都类似与指针与数组,指针与普通的变量。举一反三即可。

你可能感兴趣的:(黑马程序员-C语言数组与指针学习心得)