变量被初始化会对应栈或者堆一个地址,地址指向开始存放变量的值,所占字节数由变量类型决定。而指针就保存变量的地址,占4个字节。
#include <stdio.h>
main()
{
int i = 1;
int *p;
p = &i;//保存i的地址
printf("%d", *p); //获取指针保存的地址对应的值,根据指针定义的类型获取地址的字节数
}
使用指针打印字符串
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "hello world";
printf("sizeof = %d, strlen = %d\n", sizeof(str), strlen(str));
char *p;
p = str;
while(*p != '\0')
{
putchar(*p);
p++;
}
putchar('\n');
}
使用指针交换变量值
#include <stdio.h>
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int main(void)
{
int a = 1;
int b = 2;
printf("a=%d, b=%d\n", a, b);
swap(&a, &b);
printf("a=%d, b=%d\n", a, b);
}
使用指针生成随机整型数组
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void initArr(int *p, int nums);
void showArr(int *p, int nums);
main()
{
int arr[10];
initArr(arr, 10);
showArr(arr, 10);
}
void initArr(int *p, int nums)
{
int i;
srand(time(NULL));
for(i = 0; i < nums; i++) {
*p = rand();
p++;
}
}
void showArr(int *p, int nums)
{
int i;
for(i = 0; i < nums; i++)
printf("%d\t", *(p+i));
}
使用指针指向函数,函数本质也是一个地址指向了具体的逻辑代码
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int (*demo)(int, int);
void main()
{
printf("%d\n", add(1,1));
printf("%p\n", add);
int (*p)(int a, int b) = add;
printf("%d\n", p(3,3));
p = mul;
printf("%d\n", p(3,3));
demo = add;
printf("%d\n", demo(3,9));
}
使用指针指向分配内存,malloc可通过传字节数从堆里分配内存
#include <stdio.h>
#include <stdlib.h>
int * generate(int size)
{
return (int*)malloc( sizeof(int) * size);
}
void main()
{
int* p;
int i;
int size = 2;
p = generate(size);
for(i = 0; i< size; i++) {
p[i] = i;
}
printf("%d", p[1]);
}