指针和数组之间的关系
#include <stdio.h>
/**
arr[] 数组
length 数组的长度
**/
void printArr(char arr[], int length){
int i=0;
for(;i<length;i++){
printf("arr[%d]=%c\n",i,arr[i]);
}
}
main()
{
//数组是一块连续的内存空间。
//数组名称实际上是 就是数组在内存中的首地址。 数组名实际上是一个指针变量
char arr[6] = {'h','e','l','l','o','\0'};
printArr(arr,5);
printf("arr[0]=%c\n",arr[0]);
printf("arr[0]=%#x\n",&arr[0]);
printf("arr[1]=%#x\n",&arr[1]);
printf("arr[2]=%#x\n",&arr[2]);
printf("arr = %#x\n",arr);
printf("*arr = %c\n",*arr);
printf("*(arr+1) = %c\n",*(arr+1));
printf("*(arr+2) = %c\n",*(arr+2));
int intarr[8] = {1,2,3,4,78686,6,7,8};
printf("*intarr = %d\n",*intarr);
printf("*(intarr+1) = %d\n",*(intarr+1));
system("pause");
}
指针的运算
#include <stdio.h>
main()
{
int i = 3; //山东省 解放路 小房子 门牌号30 里面住了一个3
double j = 5; //芝加哥 解放路 大房子 门牌号50 里面住了一个5
int* p = &i;
double* q = &j;
//printf("p-q = %#x\n",p-q); 这样的计算没有任何意义。
//指针的计算,只会在数组里面 ,连续的内存空间进行计算才有意义。
int arr[5] = {1,2,3,4,5};
printf("p-q = %d\n",&arr[4]-&arr[0]);
system("pause");
}
#include <stdio.h>
main()
{
//32位 4byte
int i = 3;
int* ip = &i;
double d = 3.143;
double* dp = &d;
float f = 234.2;
float* fp = &f;
long l = 32424324;
long* lp = &l;
long long ago = 30;
long long* agop = &ago;
char c = 'a';
char* cp = &c;
printf("指针的长度 ip=%d\n",sizeof(ip));
printf("指针的长度 dp=%d\n",sizeof(dp));
printf("指针的长度 fp=%d\n",sizeof(fp));
printf("指针的长度 lp=%d\n",sizeof(lp));
printf("指针的长度 agop=%d\n",sizeof(agop));
printf("指针的长度 cp=%d\n",sizeof(cp));
system("pause");
}
13_指针的常见错误
#include <stdio.h>
main()
{
short s = 5;
//1.数据类型要和指针类型完全匹配
// float* fp = &s;
//printf("*fp=%f\n",*fp);
//2.指针变量未经赋值,不可使用。
int* p ;
// 野指针 ,非常危险的。
printf("*p=%d\n",*p);
*p = 3242;
system("pause");
}
#include <stdio.h>
#DEFINE PI 3.1415
void func(int** m){
int i = 3;
int* p = &i;
*m = p;
printf("p=%#x\n",p);
}
main()
{
int* r ;//指针变量 用于存放地址。
func(&r);
printf("---sadfdsdaf-\n");
printf("*r=%d\n",*r); //野指针
printf("主函数main r = %#x\n",r);
system("pause");
}