嵌入式c语言基础 --数组与指针

嵌入式c语言基础
1.指针与数组

指针是一种变量的类型,存放某一元素的地址

指针获取数组中的值


#include <stdio.h>

int main(void) { 
    
     int a = 10;
     int *p = &a;
     
     char ch = 'A';
     char *p_ch = &ch;
     
     printf("a:%d\n",a);
     printf("*p:%d\n",*p);   //*p 表示  p 指向的地址中存放的数
     printf("&a:%p\n",&a);   //& 取地址 符号 
     printf("p:%p\n",p);     //p是一个地址名,存放的是地址。像变量名存放变量
	 printf("&p:%p\n",&p);   // 指针本身也是变量,也需要地址存放  ,查看存放指针变量的地址
	 printf("p+1:%p\n",p+1);  //指针的计算    加1,表示加一个int的长度 4个字节
	 printf("p_ch:%p\n",p_ch);
	 printf("p_ch+1:%p\n",p_ch+1); //表示加一个字符char的长度,1个字节
	return 0;
}


a:10
*p:10
&a:0x7fffa35d1b5c
p:0x7fffa35d1b5c
&p:0x7fffa35d1b60
p+1:0x7fffa35d1b60
p_ch:0x7fffa35d1b5b
p_ch+1:0x7fffa35d1b5c








2.数组与指针    注意二维数组的指针表示
#include <stdio.h>

int main(void) { 
    int array[10] = {0,1,2,3,4,5,6,7,8,9};
    printf("%d\n",array[0]);
    array[7] = 70;
    printf("%d\n",array[7]);
    
    printf("%p\n",array);   //数组的地址(第一个元素的地址)
    printf("%p\n",&array[0]); //第一个元素的地址(与上一句的结果相同)
    
    printf("%d\n",*array);  //第一个地址存放的数
    
    printf("%p\n",(array+1));  //指针的计算。与下一句相同
    printf("%p\n",&array[1]);
    
    
    
    
    int array_m[3][2] = {{1,2},{3,4},{5,6}};  //  多维数组 
    printf("%d\n",array_m);     //{1,2} 的地址  -----------------------------------------------有点晕
    printf("%d\n",*(*(array_m+1)+1));
    printf("%d\n",*(*(array_m)));
    
	
	//利用指针获取值,总结的规律。理解不了指针就记下这些公式
    //array[n] == *(array+n);
    //array[n][m] == *(*(array+n)+m);
    //array[n][m][o] == *(*(*(array+n)+m)+o);
    

}


0
70
0x7fff66be95f0
0x7fff66be95f0
0
0x7fff66be95f4
0x7fff66be95f4
1723766224
4
1






3.数组指针【指向一个数组的指针】   注意形式 


#include <stdio.h>
#include <stdlib.h>


//typedef int (*p_arr_t)[3];   #定义一个新的指针类型   typedef的用法



int main(void) { 

    int array[3] = {1,2,3};
    int (*p_arr)[3] = &array;//定义一个数组指针 int (*p_arr)[3]  ¥¥¥¥¥
    //int (*p_arr)[3] = array;// 数组首元素地址 与上一句的结果相同,但是意义不同,这句表示数组指针是错误的,只能用上一句
    
    //p_arr_t p_arr = &array;    //使用typedef的定义指向数组的指针
    
    printf("%d\n",(*p_arr)[2]); //*p_arr  指向数组 ¥¥¥¥¥

}




4.指针数组      一个数组里放的都是一堆指针
int main(void) { 
    int count;
    char * string[4] = {"hello worlf\n","I am\n ","who are you doing","good bay"};
    for(count=0;count<4;count++){
        
            printf(string[count]);

    }

}



hello worlf
I am
who are you doinggood bay


5.函数指针   指向函数的指针

#include <stdio.h>
#include <stdlib.h>


double Add(double a,double b) {return(a+b);};

double (*p_func)(double a,double b) = Add;

//typedef double (*p_func_t)(double a,double b);


int main(void) { 
    
    // pfunc_t p_func = Add;
    double x = 10;
    double y = 20;
    double c = 22.3;
    double d = 456.2;
    printf("%p\n",Add); // 返回函数的地址 
    printf("%lf\n",Add(x,y));
    printf("%lf\n",p_func(c,d));
    printf("%p\n",p_func);
    
   
    
    
    
}
0x40052d
30.000000
478.500000
0x40052d



6.返回指针的函数


#include <stdio.h>
#include <stdlib.h>




char *mystrcat(const char * src1, const char * src2){
    
    static char string[1000];
    sprintf(string,"%s%s",src1,src2);
    return (string);
}



int main(void) { 
	
	char * string1 = "hello";
	char * string2 = "world";
	
	printf("%s\n",mystrcat(string1.string2));
}




7.小势力
#include <stdio.h>
#include <stdlib.h>


double Add(double x, double y){return(x+y);}
double Sub(double x, double y){return(x-y);}
double Mul(double x, double y){return(x*y);}
double Div(double x, double y){return(x/y);}


typedef double (*p_func_t)(double ,double); //定义一个指针类型


int main()
{
   /* 我的第一个 C 程序 */
   double x = 45;
   double y =55;
   int count;
	p_func_t func[4] = {Add,Sub,Mul,Div};   //指针数组
	
	char * string[4] = {"x+y=","x-y=","x*y=","x/y="};
	
	for(count=0;count<4;count++){
		printf("%s%lf\n",string[count],func[count](x,y));
	}
   
   return 0;
}



x+y=100.000000
x-y=-10.000000
x*y=2475.000000
x/y=0.818182













猜你喜欢

转载自blog.csdn.net/qq_35810838/article/details/84679850