您的位置:首页 > 其它

28-29-指针和数组

2017-10-17 19:53 267 查看

1、数组的本质



#include <stdio.h>

int main()
{
int a[5] = {0};
int* p = NULL;

printf("a = 0x%X\n", (unsigned int)(a));
printf("a + 1 = 0x%X\n", (unsigned int)(a + 1));

printf("p = 0x%X\n", (unsigned int)(p));
printf("p + 1 = 0x%X\n", (unsigned int)(p + 1));

return 0;
}
a = 0x4A6D54F0
a + 1 = 0x4A6D54F4
p = 0x0
p + 1 = 0x4


2、指针与整数运算



3、指针与指针运算



4、指针比较



#include <stdio.h>

int main()
{
char s1[] = {'H', 'e', 'l', 'l', 'o'};
int i = 0;
char s2[] = {'W', 'o', 'r', 'l', 'd'};
char* p0 = s1;
char* p1 = &s1[3];
char* p2 = s2;
int* p = &i;

printf("%d\n", p0 - p1);
//printf("%d\n", p0 + p2); //ERROR
printf("%d\n", p0 - p2);
// printf("%d\n", p0 - p);  //ERROR
//printf("%d\n", p0 * p2); //ERROR
//printf("%d\n", p0 / p2); //ERROR

return 0;
}
-3
-16


#include <stdio.h>

#define DIM(a) (sizeof(a) / sizeof(*a))

int main()
{
char s[] = {'H', 'e', 'l', 'l', 'o'};
char* pBegin = s;
char* pEnd = s + DIM(s); // Key point
char* p = NULL;

printf("pBegin = %p\n", pBegin);
printf("pEnd = %p\n", pEnd);

printf("Size: %d\n", pEnd - pBegin);

for(p=pBegin; p<pEnd; p++)
{
printf("%c", *p);
}

printf("\n");

return 0;
}

pBegin = 0x7ffdde8ffa10
pEnd = 0x7ffdde8ffa15
Size: 5
Hello


5、小结



6、数组访问方式



7、下标访问与指针访问



8、a和&a的区别



#include <stdio.h>

int main()
{
int a[5] = {1, 2, 3, 4, 5};
int* p1 = (int*)(&a + 1);
int* p2 = (int*)((int)a + 1);
int* p3 = (int*)(a + 1);

printf("%d, %d, %d\n", p1[-1], p2[0], p3[1]);

return 0;
}
// A. 数组下标不能是负数,程序无法运行


9、数组参数



#include <stdio.h>

void func1(char a[5])
{
printf("In func1: sizeof(a) = %d\n", sizeof(a));

*a = 'a';

a = NULL;
}

void func2(char b[])
{
printf("In func2: sizeof(b) = %d\n", sizeof(b));

*b = 'b';

b = NULL;
}

int main()
{
char array[10] = {0};

func1(array);

printf("array[0] = %c\n", array[0]);

func2(array);

printf("array[0] = %c\n", array[0]);

return 0;
}
In func1: sizeof(a) = 8
array[0] = a
In func2: sizeof(b) = 8
array[0] = b


10、小结

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: