1.初识指针(C语言)

1.初识指针(C语言)_第1张图片

 1.初识指针(C语言)_第2张图片

 指针是个变量,存放内存单元的地址(编号)。

 1.初识指针(C语言)_第3张图片

 1.初识指针(C语言)_第4张图片

 感觉这边不是太透彻,先暂放。

#include 

int main()
{
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(double*));
    return 0;
}

 指针类型的大小都为4.

 1.初识指针(C语言)_第5张图片

 不同类型的指针变量存放的地址相同。那么它们有什么区别?

1.初识指针(C语言)_第6张图片

 1.初识指针(C语言)_第7张图片

 嗯,神奇~

1.初识指针(C语言)_第8张图片

 如果指针是char类型,经过解引用操作只改变了一个字节。

所以指针的类型决定了解引用操作所能访问的内存空间的大小。 

int* p; *p能够访问4个字节

char* p; *p能够访问1个字节

double* p; *p能够访问8个字节

1.初识指针(C语言)_第9张图片

 一个差4,一个差1.

指针类型决定了:指针走一步走多远(指针的步长)

int* p; p+1 --> 4

char* p; p+1 --> 1

double* p; p+1-->8

1.初识指针(C语言)_第10张图片 

 

#include 

int main()
{
	int arr[10] = {0};
	char* p = arr;
	int i = 0;
	for(i=0; i<10; i++)
	{
		*(p+i) = 1;
	}
	for(i=0; i<10; i++)
	{
		printf("%d ", arr[i]);
	}
    return 0;
}

1.初识指针(C语言)_第11张图片

 一次跳动一个字节。

注意地址的变化,每一个字节就有一个地址编号。

野指针:就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

1) 

#include

int main()
{
    int a;//局部变量不初始化,默认为随机值
    int* p;//局部的指针变量,被初始化为随机值
    return 0;
}

2)

#include

int main()
{
    int arr[10] = {0};
    int* p = arr;
    int i = 0;
    for(i=0; i<14; i++)
    {
        p++;
    }
    //越界
    return 0;
}

 指针越界访问

3)

#include

int* test()
{
    int a = 10;
    return &a;
}
int main()
{
    int* p = test();
    *p = 20;

    return 0;
}

 1.初识指针(C语言)_第12张图片

 指针指向的空间被释放了。

1.初识指针(C语言)_第13张图片

 

你可能感兴趣的:(C语言从入门到进阶,c语言,r语言,c++)