C语言数组与指针

1.指针需要占用内存空间,指针存储内存地址的值(指针大小为4字节32位);

使用时:*号取指针指向的内存地址中的值;

声明时:*号表示指针类型

*((int*0X22FFCC= 1;--->0X22FFCC声明为int型指针,在对0X22FFCC地址赋值

2.传址调用

当函数内部想修改外部的值时,使用传址;(如:void func(void *a)

3.数组地址与数组名

1)数组名为数值首地址

2)数组地址使用&取地址,

3)首地址与数组地址相同

4.数组名

1)数组名可以看做常量指针

1.数组名只能作为右值

2.数组名指向数值首地址

2)下面情况不作为常量指针

1.数值名为sizeof()参数;

2.数组名使用&

(char *)(* (unisgnde int*)p))

3)数组名不是指针

5.指针运算

1) p+n -->(unsigned int)p + n *sizeof(*p)

指针p指向同类型数组元素时:p+1指向当前元素下一个元素

P-1指向当前元素上一个元素

2)p0 - p1 -->((unsigned int)p0 - (unsigned int)p1)/sizeof(*p)

指针间只能用减法

只有两指针指向同一个数组时,相减的值为元素下标

6.a&a

a + 1 (unsigned int)a + sizeof(*a)

&a + 1 (unsigned int)(&a) + sizeof(a)

7.字符串可以在栈空间,堆空间,只读存储区(不可修改字符串)

char s1[] = {H’,‘e’,‘l’,‘l’,‘o}; --->栈空间(字符数组)

char s1[] = {H’,‘e’,‘l’,‘l’,‘o’,\0}; --->栈空间(字符串)

char* s2 = Hello;--->只读存储区(不可修改)

char* s3 = (char*)malloc(6*sizeof(char)); --->堆空间

s3[0] = ‘H’; s3[1] = ‘e’; s3[2] = ‘l’;

s3[3] = ‘l’; s3[4] = ’o’ ; s3[5] = ‘\0’;

8.size_t strlen();

size_t 是无符号数;相减不可能产生负数if( strlen(a)-strlen(b) > =0 )警告

9.strcmp()

1)0值表示 相等

2)第一个字符大于第二个字符 返回值 :大于0

3)第一个字符小于第二个字符 返回值 :小于0

10.strcpystrcat必须保证目标字符数组剩余空间足以保存整个源字符串

1)strncpy(a,b,n)  b复制n个字符到a中,剩下的空间以\0填充

2)strcat(a,b,n)    b复制n个字符添加到a后面,总是在最后添加\0,不填充

11.数组名

一维数组:int a[5]  -->  a的类型为 int*

二维数组:int a[5][5]  -->  a的类型为 int (*)[5]

a为首元素的地址为a[0],a[0][0]

12.用指针形式遍历二维数组

int a[3][4]

for(i=0;i<3;i++)

{

for(j=0;j<4;j++) printf(“%d\n”,*(*(a + i) + j ));

}

13.

一维数组参数:必须提供长度信息;

二维数组参数:不能直接传递给函数。

14.函数类型

typedef type name(parameter list);

( int add(int i,int j) --> typedef int f(int,int) )

15.函数指针

1函数名就是函数的入口地址

2)定义:type  (*point)(parameter list)  

Type:返回类型

Point:函数名

Paramseter:传参

typedef void (FUNC)(int);

void test(int a)

{

printf(“hello\n”);

}

int main()

{

FUNC* p = test;

p(2);

}

16.回调函数

typedef void (* FUNC)(int);

void test(int a)

{

printf(“hello\n”);

}

void g(int a,FUNC f)

{

f(a);

}

int main()

{

g(2,test);

}

17.右左法则

int(*(*p4)[5])(int*); int  (*  (*p4)  [5]  )  (int*);

1.(*p4) 然后向右得到[5]

2.[5] 然后向左得到{*}

3.(*)

4.int(int*)


猜你喜欢

转载自blog.csdn.net/qq_14814909/article/details/75435995